在与python相关的面试中,很经常能看到这样类似的一道题:

有13只猴子围成一圈,编号分别为1~13,从1开始报数,报到10之后,下一个猴子又重新由1报起,每逢报到7的猴子出局,请设计程序,求得最终留下来的那一只猴子的编号。

以前,我的解法是老老实实地写几个循环嵌套,不过其实有更加省事的办法:使用字典!

以字典的键(int类型的1-13)作为猴子的编号,以他们对应的键值作为猴子当前的状态(报到几号数或者是已出局),定义字典的时候可以设置一个初值给它们。然后,设报数号为1,通过轮巡1-13号猴子进行报数,已出局的猴子跳过,未出局的猴子报数,报完判断当前猴子报的是否为7,是则将该猴子的状态设置为出局,然后报数号继续+1,到10之后又重置为1,猴子号数也是,报到13号猴子以后重置为1号猴子。最后通过判断是否已经有12只猴子出局,即可结束该循环。

代码如下:

monkey = {i + 1: "" for i in range(13)}

callnumber = 1

try:

while True:

for m in range(1, 14):

if monkey[m] != "out":

monkey[m] = callnumber

if callnumber == 7: monkey[m] = "out"

callnumber += 1

if callnumber > 10: callnumber = 1

if list(monkey.values()).count("out") == 12: raise TypeError

except:

[print("\nmonkey:{} is win".format(k)) for k, v in monkey.items() if v != "out"]

这里我还是用了两层循环,通过try...except加raise Error来一次性打破多重循环,实际上也可以做成一层循环,只做while True的就可以,里面的for循环可以自建一个循环计数器变量来替代掉。

也有使用列表的做法,当然,上一篇文章提到了高手通过极限缩减代码行数来秀技能,那在这个场景也是可以这样玩的

status = [[0 for i in range(13)], 1, 0]

while 1:

if status[0][status[2]] != -1:

status[0][status[2]] = status[1]

if status[1] == 7: status[0][status[2]] = -1

status[1] += 1

if status[1] > 10: status[1] = 1

if status[0].count(-1) == 12: break

status[2] += 1

if status[2] == len(status[0]): status[2] = 0

[print("monkey:{} is win".format(index + 1)) for index, k in enumerate(status[0]) if k != -1]

这段代码让人难受的地方在于,你要是不将status[0],status[1],status[2]替换成别的变量,你需要花费超级多的经历去看懂这段代码,玩儿嘛,哈哈哈!仅供参考,不喜勿喷~

python循环报数游戏_python经典面试题之一:猴子报数相关推荐

  1. python代码表达失恋_Python 经典面试题汇总之网络篇

    网络篇 1.简述 OSI 七层协议 物理层:定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质. 数据链路层:定义如何传输格式化数据,以及如何访问物理介质. 网络层:定义逻辑网络地址. ...

  2. python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...

    昨晚一小伙后台问xrange和range有啥区别,讲了下他倒领悟的挺快,其实这也是你各面试Python岗位,经常会遇到的Python面试题,长个心眼哈,说不定明年3月你找工作就用上了. 废话不多说,开 ...

  3. python sorted函数_Python 经典面试题 二

    1.简要描述Python的垃圾回收机制(garbage collection) Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅. •引用计数:Python在内存中存储每个对象的引用 ...

  4. python循环定义变量_Python变量和循环

    1.Python变量 比C语言,Java语言更加简洁,不需要加int等等类型定义,直接变量名 = 值,Python里甚至不需要分号.有些特定的不能当做变量名,变量只能由字母.数字和下划线组成,下划线可 ...

  5. 如何用python制作五子棋游戏_Python制作打地鼠小游戏

    原文链接 Python制作小游戏(二十一)​mp.weixin.qq.com 效果展示 打地鼠小游戏https://www.zhihu.com/video/1200492442610450432 简介 ...

  6. python智力问答游戏_Python语言编写智力问答小游戏功能

    本篇博文将使用Python代码语言简单编写一个轻松益智的小游戏,效果如下所示: 1.设计思路 本项目使用SQLite建立问答题库,每道题包括4个选项答案(3个正确答案,1个错误答案).每道题都有一定分 ...

  7. python pygame小游戏_python:利用pygame实现消消乐小游戏

    消消乐记分小游戏GUI界面 文件结构规划 定义config.py文件存储相关参数:包括界面的宽高,整个方格行列个数,总格数等等. 定义utils.py文件用于存放基础的类和函数:包括整个消除拼图类,游 ...

  8. python循环语句嵌套_Python 循环语句

    循环语句 ​循环语句主要是用于解决某些重复的代码工作,使需要重复的代码只写一遍即可. Python循环语句主要有两种:while循环和for...in...循环. 一.while循环 主要用于不确定循 ...

  9. python开发大型游戏_Python也有做大型游戏的潜力?原来我们小看了Python,无所不能...

    前言 在小编以前还没怎么接触很多编程语言时,都是认为游戏(端游,手游)都是用C做出来了!不知道大家有没有这么想过,反正我是这样的.后来慢慢接触多了,才知道并不是所有的都是这个样子的! Python也有 ...

最新文章

  1. Ansible01-Ansible基础和部署
  2. Robot framework 二次开发笔记
  3. 【数据平台】Eclipse+Scala远程开发调试关于hostname的问题
  4. ipynb是什么文件_数据科学家的神器:为什么大家都用Kaggle?
  5. 石油勘探是属于计算机应用中的,计算机在石油勘探开发中的应用论文
  6. 浅谈mpvue项目目录和文件结构
  7. 将xscj指定为当前数据库_通过网络连接数据库模式Hive的搭建过程详解
  8. 腾讯大动刀:微信试行松绑外链!用户已可打开淘宝、抖音等链接
  9. mysql 临时表循环_在游标循环中查询临时表可以,但是结束循环后就无法查询了。...
  10. Boost库编译安装
  11. js点击事件onclick_关于JavaScript的事件绑定问题
  12. web javescript与cookie理解
  13. UTM投影分带相关资料及计算公式
  14. 《2019年中国互联网网络安全报告》发布,恶意程序攻击半数来自美国
  15. Matlab linspace函数C++实现
  16. 判断一个数是否是素数
  17. oracle normsinv函数,统计函数NormSDist和NormSInv函数实现
  18. 3D游戏模型之鼻子的建模
  19. [JavaScript]45 Fresh Useful JavaScript and jQuery Techniques and Tools
  20. 把自己的电脑作为网络代理服务器

热门文章

  1. 【转】 LINQ TO SQL中的selectMany
  2. springboot单元测试通过MockMvc类调用controller接口
  3. Java高级工程师必备数据结构算法高效查找算法原理分析与实现
  4. Zimbra的Web客户端国际字体的控制机制及定制方法
  5. laravel debug,http模式,日志
  6. yii2.0 下拉菜单
  7. 修改远程桌面端口号3389
  8. 香港的CIA线服务器是什么?
  9. 在CentOS7.2上部署Postgres-XL分布式数据库
  10. P(Y=y|x;θ)表示什么意思