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