Python代码实现尼姆游戏聪明模式
代码问题描述:
尼姆游戏是个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。
在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2 的幂次方减1——也就是3,7,15,31 或63。除了堆的大小已经是2 的幂次方减1,在其他情况下这样走都是符合游戏规则的。在那种情况下,计算机就按游戏规则随机拿走一些。
编写程序,模拟聪明版本的尼姆游戏。
目的:
1、理解尼姆游戏规则。
2、了解多个函数定义与调用。
3、理解并熟练运用while 循环。
4、理解带else 子句的循环结构执行流程。
5、理解循环语句中的break 语句的作用。
6、了解使用循环和异常处理结构对用户输入进行约束的用法
上代码
机器回合要考虑好机器的每一种情况

 #机器回合po=[]              #用列表把可能的数存进去god=n//2-1for i in range(0,int(log2(n))+1):    #将所有小于n的,2的幂次方-1的数存到列表中c=2**(i+1)-1po.append(c)while True:num=choice(po)                 #随机从列表中选出一个数d=n-num                       #d是npc取得物品个数if 0<d<=n//2 and n not in po:          #筛选符合条件的数print("电脑拿走了{}个物品".format(d))return delif n in po:                  #个数本来就是2的幂次方-1,npc随机取数m=randint(1,god+1)print("电脑拿走了{}个物品".format(m))return melse:continue

人类回合要考虑到用户的输入是否符合规则

 #人类回合while n>1:print("现在一共有{}个物品".format(n))while True:try:num =int(input("请你输入你要拿走的物件个数:"))assert 1<=num <=n//2                              #确保输入的数符合游戏规则breakexcept:print("请输入1到{}的数".format(n//2))n-=numif n==1:return '恭喜你赢了'#机器回合n-=computer(n)else:return '不好意思,你输了'

下面是完整代码

from math import *
from random import *
def computer(n):#机器回合po=[]god=n//2-1for i in range(0,int(log2(n))+1):    #将所有小于n的,2的幂次方-1的数存到列表中c=2**(i+1)-1po.append(c)while True:num=choice(po)                 #随机从列表中选出一个数d=n-num                       #d是npc取得物品个数if 0<d<=n//2 and n not in po:          #筛选符合条件的数print("电脑拿走了{}个物品".format(d))return delif n in po:                  #个数本来就是2的幂次方-1,npc随机取数m=randint(1,god+1)print("电脑拿走了{}个物品".format(m))return melse:continue
def person(n):print("=================*****尼姆游戏聪明模式*****=================")#人类回合while n>1:print("现在一共有{}个物品".format(n))while True:try:num =int(input("请你输入你要拿走的物件个数:"))assert 1<=num <=n//2                              #确保输入的数符合游戏规则breakexcept:print("请输入1到{}的数".format(n//2))n-=numif n==1:return '恭喜你赢了'#机器回合n-=computer(n)else:return '不好意思,你输了'
def main():print(person(randint(1,100)))      #随机选择总数,开始游戏while True:try:continue1=input("请问是否继续游戏,继续请输入yes,退出请输入no:")assert continue1=='yes' or continue1=='no'if continue1=='no':print("感谢您的使用,祝您生活愉快!!!")breakelif continue1=='yes':print(person(randint(1,100)))except:print("请输入yes 或no")
if __name__=='__main__':main()

代码实现效果如下

Python代码实现尼姆游戏聪明模式相关推荐

  1. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)

    题目   尼姆游戏,这是一个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须拿走一部并且最多只能拿走一半物品,然后轮到下一个玩家.拿走 ...

  2. python编程实验,模拟聪明版的尼姆游戏设计原理

    实验原理与内容: 本实验完成一个模拟聪明版的尼姆游戏功能: 尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分,在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并 ...

  3. Python设计和实现聪明的尼姆游戏

    Python设计和实现聪明的尼姆游戏 尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品 ...

  4. 使用Python编写一个聪明的尼姆游戏

    关于尼姆游戏的介绍请参考上一篇文章:一个傻傻的尼姆游戏及其Python实现,本文使用Python实现一个聪明的尼姆游戏. 在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1--也就是 ...

  5. python尼姆游戏_python实现聪明的尼姆游戏(人机对战)

    尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分:在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家.拿走最后一个物品 ...

  6. 尼姆游戏(聪明版)python

    尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家.拿走最后一个物品 ...

  7. python尼姆游戏_使用Python编写一个聪明的尼姆游戏

    关于尼姆游戏的介绍请参考上一篇文章:一个傻傻的尼姆游戏及其Python实现,本文使用Python实现一个聪明的尼姆游戏. 在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1--也就是 ...

  8. Python聪明的尼姆游戏(人机对战)

    实验目的: (1)理解尼姆游戏规则. (2)了解多个函数定义与调用. (3)理解并熟练运用 while 循环. (4)理解带 else 子句的循环结构执行流程. (5)理解循环语句中的 break 语 ...

  9. (新手小白必学!)用Python设计和实现聪明的尼姆游戏(人机对战)!!!!

    题目: 尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家.拿走最后 ...

最新文章

  1. SFB 项目经验-65-使用域管理员安装不了Exchange 2010 SP3 CU21
  2. 编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型...
  3. JavaWeb界面在线配置代码生成器
  4. easyui form提交和formdata提交记录,查看FormData对象内部的值
  5. windbg学习-----n(Set Number base)
  6. apps-privacy-policy
  7. Spring boot(八):RabbitMQ详解
  8. linux mint cinnamon_2019年最佳的8个Linux发行版
  9. xp 优化   转自天涯
  10. java验证cron表达式_cron表达式
  11. MySQL主从同步(四)——M-M架构配置实战
  12. java相对路径的写法格式_java相对路径的写法
  13. 三天撸完了MyBatis,各位随便问!!(冰河吐血整理,建议收藏)
  14. GitCode上手使用体验
  15. java web 题_javaWeb习题与答案
  16. i.MX6DL飞思卡尔双核安卓核心板主控
  17. C numi和弓道 双指针(2020牛客寒假基础训练营1 )
  18. 4月20日第壹简报,星期四,农历三月初一,谷雨
  19. 最新版项目部署到腾讯云超详细教学
  20. 與古禪師談、求長生不老術

热门文章

  1. 凭借这份pdf成功拿下了蚂蚁金服、字节跳动、小米等独角兽大厂的offer
  2. 嵌入式GUI FTK 界面设计器
  3. C8051F340 USB Fn hacking
  4. VR画面渲染性能是这样提升的
  5. PlantUML 用代码画思维导图,时序图,流程图
  6. Deformable ConvNets v2 原理与代码解析
  7. 悟空号 量子计算机,“悟空号”首席科学家常进做客物理学院研究生学术周末...
  8. 最全深度强化学习资料
  9. Excel数据分析从入门到精通(十五)数据透视表之动态仪表盘
  10. 双色球号码自动生成系统-------买彩票不愁啦