python 约瑟夫生者小游戏 用list实现
问题描述:
30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
查看网上的资料都是把人员实例为字典,1代表在船上,0代表下船。网上的实现代码如下:
1 people={} 2 for x in range(1,31): 3 people[x]=1 4 # print(people) 5 check=0 6 i=1 7 j=0 8 while i<=31: 9 if i == 31: 10 i=1 11 elif j == 15: 12 break 13 else: 14 if people[i] == 0: 15 i+=1 16 continue 17 else: 18 check+=1 19 if check == 9: 20 people[i]=0 21 check = 0 22 print("{}号下船了".format(i)) 23 j+=1 24 else: 25 i+=1 26 continue
重新写了一种以list来实现该功能。代码如下:
1 people = [x for x in range(1, 31)] # 生成人员 2 3 xia = [] # 存放下船人的list 4 j = 0 # 上次顺序下船的余量 5 while True: 6 for i in range(1, len(people)+1): 7 8 if (i+j) % 9 == 0: 9 xia.append(people[i-1]) 10 j = (len(people) + j) % 9 11 print("下船者:", xia) 12 for x in xia: 13 people.remove(x) 14 xia = [] 15 if len(people) <= 15: 16 break