实验原理与内容:

本实验完成一个模拟聪明版的尼姆游戏功能:

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

        在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2 的幂次方减1——也就是3,7,15,31 63。除了堆的大小已经是的幂次方减1,在其他情况下这样走都是符合游戏规则的。在那种情况下,计算机就按游戏规则随机拿走一些。

编写程序,模拟聪明版本的尼姆游戏。

本实验中主要涉如下过程。

1.游戏分析与算法设计

2.使用Python编写游戏程序

3.编写Python源文件

4.编译/调试程序

5.运行程序

实现代码:

from random import randint,choice
def everyStep(n):half = n/2m = 1# 所有可能满足的取法possible = []while True:# 机器取走剩下后的数量rest = 2**n - 1if rest >= n:break# 剩下的数量大于一半,则取走的不超过一半if rest >= half:possible.append(n-rest)m = m + 1#     如果至少存在一种取法使得剩下物品数量为 2*n-1if possible:return choice(possible)# 无法使得剩余物品数量为 2*n-1,随机取走一些return randint(1,int(half))def smartMinGame(n):while n>1:# 人类玩家先走print("现在到你了,我们还有{0}步".format(n))# 确保人类玩家输入合法整数值while True:try:num = int(input("你想走多少步:"))assert 1<= num <=n//2breakexcept:print("错误,必须在1到{0}".format(n//2))n-=numif n==1:return '我(计算机)输了'# 计算机玩家拿走一些n -= everyStep(n)if n == 1:return '你输了'print(smartMinGame(randint(1,100)))

运行演示:

python编程实验,模拟聪明版的尼姆游戏设计原理相关推荐

  1. Python题目——实现人机对战的尼姆游戏:假设有一堆物品,计算机和人类玩家轮流从其中拿走一部分。在每一步中,人或计算机可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品

    问题描述:尼姆游戏是这样一个游戏:假设有一堆物品,计算机和人类玩家轮流从其中拿走一部分.在每一步中,人或计算机可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家 ...

  2. 实验三 聪明的尼姆游戏 (educoder)

    实验三 聪明的尼姆游戏(人机对战) 实验目的: (1)理解尼姆游戏规则 (2)了解并熟练使用while循环 (3)理解带else子句的循环结构执行流程 (4)理解循环语句的break语句的作用 (5) ...

  3. Python代码实现尼姆游戏聪明模式

    Python代码实现尼姆游戏聪明模式 代码问题描述: 尼姆游戏是个著名的游戏,有很多变种玩法.两个玩家轮流从一堆物品中拿走一部分.在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多 ...

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

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

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

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

  6. 尼姆游戏(人机对战)的Python实现

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

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

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

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

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

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

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

最新文章

  1. Python性能分析指南——中
  2. Apple高规格推3232吋LCD面板XDR
  3. python4delphi 设置syspath
  4. 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
  5. 串口通信模块4:串口操作自定义类(1)
  6. 被替换的项目不是替换值长度的倍数_面试官,为啥HashMap的长度是2的n次方?
  7. Docker最全教程——数据库容器化之持久保存数据(十二)
  8. Wordpress中显示页面当前位置
  9. 模拟ArrayList底层实现
  10. Linux基本命令总结(六)
  11. (libgdx学习)GestureDetector
  12. Android Sqlite3数据库操作
  13. 微信公众平台开发视频教程
  14. Python练习题参考
  15. android 命令截图,Android截图命令screencap与视频录制命令screenrecord
  16. Classical Maths Books Intro
  17. 如何解决CPU过热100度自动关机
  18. vlc视频流转码输出配置,网页可直接访问
  19. 8大常见的服务器管理小工具
  20. SVN报错:can‘t open file db/txn-current-lock:permission denied 解决方法

热门文章

  1. 智能门锁怎么选(1)
  2. it's +时间+since/that/when/before句型用法的差别
  3. 二维码在线生成api
  4. 大蟒蛇python头像_Python个性化头像
  5. [leetCode]327. 区间和的个数
  6. 西门子服务器提升抱闸信号不输出,西门子V90伺服调试工程师不可不知的一些事儿...
  7. [模拟][模电][面试][运放]仪表放大器
  8. sql server 数据库恢复挂起
  9. 纯真ip库使用过程的总结
  10. 跳板机的基本原理,以及实现思路!