Python 约瑟夫生者死者小游戏
题目:
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
网上的答案感觉可读性差,于是重新写的代码:
list = []
for x in range(1,31):
list.append(x)
print("大家依次排成一排:")
print(list)
print("开始下船,喊道9的出列----")
j = 0 #从1数到9,如此 反复。。。
i = 0 #列表中的序号,对列表操作要用到
left = 0 #表示离开的人
# print("开始排序号:",j)
while left < 15: #因为要求只能剩下15人,这里表示离开的人如果小于15人就继续。。。
j += 1
i += 1
# print("---------我是分隔符--------")
# print("开始报数,j=",j)
# print('序号i=', i)
# print("叫到的号是:",list[i-1])
if j == 9: #当数到9的时候就开始扔,
Lnum = list[i-1]
print(Lnum,"号下船了。")
list.remove(Lnum)
left += 1
j = 0
i -= 1#当列表中元素被删除后,后面的元素要往前移动,这里表示序号往前补上
# print("---------我是分隔符--------")
if (i+left) == 30:#因为列表删除了元素,i表示的序号就少了,加上离开的人数刚好30.i是递增的,
# print("剩下的队伍是:")
# print(list)
i = 0#加到最后,表示序号到最后,这一轮列表已经到末尾了,又从新来
此前对i的操作用过 for i in list,但发现遍历的方法无法对其中的i进行操作。