Python代码实现尼姆游戏聪明模式
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代码实现尼姆游戏聪明模式相关推荐
- 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
题目 尼姆游戏,这是一个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须拿走一部并且最多只能拿走一半物品,然后轮到下一个玩家.拿走 ...
- python编程实验,模拟聪明版的尼姆游戏设计原理
实验原理与内容: 本实验完成一个模拟聪明版的尼姆游戏功能: 尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分,在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并 ...
- Python设计和实现聪明的尼姆游戏
Python设计和实现聪明的尼姆游戏 尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品 ...
- 使用Python编写一个聪明的尼姆游戏
关于尼姆游戏的介绍请参考上一篇文章:一个傻傻的尼姆游戏及其Python实现,本文使用Python实现一个聪明的尼姆游戏. 在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1--也就是 ...
- python尼姆游戏_python实现聪明的尼姆游戏(人机对战)
尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分:在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家.拿走最后一个物品 ...
- 尼姆游戏(聪明版)python
尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家.拿走最后一个物品 ...
- python尼姆游戏_使用Python编写一个聪明的尼姆游戏
关于尼姆游戏的介绍请参考上一篇文章:一个傻傻的尼姆游戏及其Python实现,本文使用Python实现一个聪明的尼姆游戏. 在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1--也就是 ...
- Python聪明的尼姆游戏(人机对战)
实验目的: (1)理解尼姆游戏规则. (2)了解多个函数定义与调用. (3)理解并熟练运用 while 循环. (4)理解带 else 子句的循环结构执行流程. (5)理解循环语句中的 break 语 ...
- (新手小白必学!)用Python设计和实现聪明的尼姆游戏(人机对战)!!!!
题目: 尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家.拿走最后 ...
最新文章
- SFB 项目经验-65-使用域管理员安装不了Exchange 2010 SP3 CU21
- 编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型...
- JavaWeb界面在线配置代码生成器
- easyui form提交和formdata提交记录,查看FormData对象内部的值
- windbg学习-----n(Set Number base)
- apps-privacy-policy
- Spring boot(八):RabbitMQ详解
- linux mint cinnamon_2019年最佳的8个Linux发行版
- xp 优化 转自天涯
- java验证cron表达式_cron表达式
- MySQL主从同步(四)——M-M架构配置实战
- java相对路径的写法格式_java相对路径的写法
- 三天撸完了MyBatis,各位随便问!!(冰河吐血整理,建议收藏)
- GitCode上手使用体验
- java web 题_javaWeb习题与答案
- i.MX6DL飞思卡尔双核安卓核心板主控
- C numi和弓道 双指针(2020牛客寒假基础训练营1 )
- 4月20日第壹简报,星期四,农历三月初一,谷雨
- 最新版项目部署到腾讯云超详细教学
- 與古禪師談、求長生不老術
热门文章
- 凭借这份pdf成功拿下了蚂蚁金服、字节跳动、小米等独角兽大厂的offer
- 嵌入式GUI FTK 界面设计器
- C8051F340 USB Fn hacking
- VR画面渲染性能是这样提升的
- PlantUML 用代码画思维导图,时序图,流程图
- Deformable ConvNets v2 原理与代码解析
- 悟空号 量子计算机,“悟空号”首席科学家常进做客物理学院研究生学术周末...
- 最全深度强化学习资料
- Excel数据分析从入门到精通(十五)数据透视表之动态仪表盘
- 双色球号码自动生成系统-------买彩票不愁啦