Python经典实例:约瑟夫生者死者小游戏

目录

游戏规则

算法思考

代码实现


游戏规则:

30 个人在一条船上,超载,需要 15 人下船。

于是人们排成一队,排队的位置即为他们的编号。

报数,从 1 开始,数到 9 的人下船。

如此循环,直到船上仅剩 15 人为止

算法思考:

毫无疑问,每数到第九个人就下船,并且重新开始计数,我们可以简单的想到以下代码:

while i:
    check += 1
    if check == 9:
        people[i] = 0
        check = 0
        print("{}号下船了".format(i))
    else:
        i+=1
        continue

但是在我们的代码中,并不能体现当第一轮每九个人(也就是3个人)下船后,再一次计数,此时people[ ]中之前下船的人仍然占据着位置,并没有真正的清除。则需要continue跳过:

 if people[i] == 0:
            i+=1
            continue
        else:
            check+=1
            if check == 9:
                people[i]=0
                check = 0
                print("{}号下船了".format(i))

如此一来会跳过之前已经下船的人编号,聪明的读者也发现了people[i]==0是用的字典方法,也就是说,想要判断该编号的人有没有下船,则需要字典的方法,编号即键对应的值是否为1来判断:

people={}
for x in range(1,31):
    people[x]=1   #创建关于people的字典,每个键的值均为1

代码实现:

people={}
for x in range(1,31):
    people[x]=1    #创建people字典,每个编号的值都为1
# print(people)
check=0   #循环9,记数
i=1        #people的编号
j=0        #下船人数或者船余下人数
while i<=31:
    if i == 31:        
        i=1            #每当循环到最后一个人时,重新循环
    elif j == 15:        
        break            #如果场上剩余15人,终止循环
    else:
        if people[i] == 0:    #读取到如果该编号的值等于0即已经下船 则跳转下一位
            i+=1
            continue
        else:
            check+=1        #循环9记数加一
            if check == 9:
                people[i]=0
                check = 0
                print("{}号下船了".format(i))    #如果记数满了 则输出,并且多一位下船人
                j+=1
            else:
                i+=1
                continue            #循环未满,下一位

Guess you like

Origin blog.csdn.net/m0_64660514/article/details/121860886