15036188778

您所在位置: 首页> 学习课程> python培训:Python实践编程练习,约瑟夫生者死者游戏

python培训:Python实践编程练习,约瑟夫生者死者游戏

发布百知教育 来源:学习课程 2019-11-07

One

题目

有30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置?


Two

思路

  • 循环报数(遍历到最后一个再重新开始一次遍历)&直到下船人数达到15人为止(主要循环)

  • 判断遍历的人是否还在船上,如果在,则报数;否则跳过本次循环,遍历下一个人。

  • 报数,如果报数到9,那个人就要下船,计数器返回到1,并且下一次遍历时就不考虑他。未到9,计数器+1,遍历下一个人。


Three

流程


python培训



Four

代码实现

people={} #创建空字典
for x in range(1,31): #通过遍历装载KEY,并将所有的VALUE赋值为1
    people[x]=1
check=0 #报数变量
i=1 #KEY循环变量
j=0 #下船计数
while i<=31: #定义循环区间
    if i == 31: #当i累加到31,即循环重新开始,重置该变量为1
        i=1
    elif j == 15: #当下船人数累加到15人,终止
        break
    else:
        if people[i] == 0: #KEY对应的值为0,即已下船,计数并继续下一循环
            i+=1
            continue
        else#在未下船的人员中判断
            check+=1 #报数开始并累加
            if check == 9: #当第9个出现
                people[i]=0 #将对应KEY的VALUE赋值为0
                check = 0 #重置报数
                print("{}号被扔下船了".format(i))
                j+=1 #下船计数
            else#下船计数不为9时计数并继续循环判断
                i+=1
                continue


运行结果



python培训


方法二:


lst = list(range(1,31))  #创建30人的列表
j=1  #报数,从1-9循环
k=0  #被丢下的人的号数,从1-30循环,如果一轮报完人数还是大于15人,号数归零进行第二轮
while True:
    if len(lst) > 15:  #如果人数大于15人,进行下面判断
        if j == 9:    #如果报到9 ,则从队伍(列表)中移除,被扔下船
            print('{:<2d}号被抛下船了'.format(lst[k]))
            lst.remove(lst[k])
            j = 1  #后面一位从1开始重新报
        else:  #如果没有报到9,继续报
            j += 1    
            k += 1
        if len(lst) == k:  #如果一轮报完人数还是大于15人,号数归零进行第二轮
            k = 0
    else:    #如果人数小于等于15人,游戏结束
        break


运行结果:



python培训班


python培训:http://www.baizhiedu.com/python2019




上一篇:java培训班 | Java 并发编程之线程基础

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请