python 约瑟夫生者小游戏 用list实现
2023-03-31 10:37:14 时间
问题描述:
30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
查看网上的资料都是把人员实例为字典,1代表在船上,0代表下船。网上的实现代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
----------------------------------------------------------6.29 更新--------------------------------------------------------------------
发现上面的代码有漏洞,
1、第11行打印下船人数,但是这一步人还没有remove出list,所以这行代码要后置
2、上面的代码考虑不全,容易下船的人多于15个。原因就是第13行在remove的时候没有增加人数的判断(第15~16行的代码)
比如修改为50人,数到的3下船,留20人在船上。用上面的代码跑就会导致船上留的人少于20人
故,修改代码如下:
people = [x for x in range(1, 51)] # 生成人员 xia = [] # 存放下船人的list j = 0 # 上次顺序下船的余量 while True: for i in range(1, len(people)+1): if (i+j) % 3 == 0: xia.append(people[i-1]) j = (len(people) + j) % 3 # 余数需要计入下一次循环 for x in xia: people.remove(x) print("下船者:", x) if len(people) == 20: # 判断到20人的时候终止循环 raise "完成" # 用异常退出2次循环 else: continue xia = []
相关文章
- Python中的函数与方法 以及Bound Method和Unbound Method
- 一文贯通python文件读取
- Python 中的异步编程:Asyncio
- 7个你现在就该学习Python的理由
- 提高Python运行效率的六个窍门
- Python数据科学:神经网络
- 一篇文章看懂大数据分析就业前景及职能定位
- R和Python中的文本挖掘:8个入门小贴士
- 告诉你为什么Python有点慢,但我却无所谓?
- 专注学习DevOps编程语言Top 5推荐
- Python发送邮件脚本
- Python多进程并行编程实践: mpi4py 的使用
- Python语言在未来的发展前景
- Python vs Ruby: 谁是最好的 web 开发语言?
- Python对Ruby:谁在Web开发领域更胜一筹?
- Python一行代码完成并行任务
- Python开发者2017应该关注的七个类库
- python爬虫入门基本知识
- 在终端中优雅地编写Python
- Python机器学习实战:信用卡欺诈检测