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

在smart模式中,计算机每次拿走一定数量的物品使得堆的大小是2的幂次方减1—也就是2,7,15,31,63等。如果有一定数量的剩余物品,计算就随机拿走一些。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 编写程序,模拟聪明版及非聪明版的尼姆游戏
# 并进行两种的比较及分析,给出聪明版比非聪明版的胜算结论
from random import randint
from math import floordef nim_silly(n):  # 愚钝版本随机取数if n <= 3:return 1return randint(1, floor(n / 2))def nim_smart(n):  # 聪明版本自动选择最佳数if n <= 3:return 1x = 0while (True):if pow(2, x) <= n < pow(2, x + 1):breakx += 1num = n - pow(2, x) + 1if 1 <= num <= n / 2:return numelse:  # 若最佳数不在范围内,则选取随机数return randint(1, floor(n / 2))def nim_game(n, choose):if choose == 'silly':print("你选择了傻瓜难度")f = nim_silly  # 函数指针选择silly函数else:print("你选择了地狱难度")f = nim_smart  # 函数指针选择smart函数while (True):print("现在共有" + str(n) + "个棋子")nim = f(n)print("Nim拿走了" + str(nim) + "个")n -= nimprint("现在共有" + str(n) + "个棋子")if n == 0:print("你赢了!")returnyou = int(input("该你了,你要拿走:"))while (True):if 1 <= you <= n / 2 or n == 1:print("你拿走了" + str(you) + "个")breakif you < 1:print("至少要拿走一个棋子!")else:print("最多只能拿走一半的棋子!")you = int(input("请重新输入,你要拿走:"))n -= youif n == 0:print("现在共有" + str(n) + "个棋子")print("你输了!")returnif __name__ == '__main__':num = int(input("请输入棋子的总数: "))choose = input("请输入你要选择的难度('silly' or 'smart'): ")nim_game(num, choose)

尼姆游戏(人机对战)的Python实现相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 一个傻傻的尼姆游戏及其Python实现

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

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

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

  9. Python编写尼姆游戏

    Python编写尼姆游戏 最主要的思想是要构建函数思想.就是要将玩家和电脑分模块给编写出来.玩家可以编写比较简单不多赘述.这里主要讲一讲电脑模块.首先我们要保证电脑拿走物品剩下来过后要是2∧n-1如果 ...

最新文章

  1. 5、Scala模式匹配
  2. HTML---百度新闻轮播图--定位练习
  3. 数据结构之通过C++来实现一个队列
  4. mysql如何和qt连接使用_Qt5学习:连接MySQL数据库
  5. vmware 12 安装centos7网络配置
  6. Angular进阶教程一
  7. omnigraffle所有模板免费下载网站
  8. 电脑出现无法访问您试图使用的功能所在的网络位置问题的解决方式
  9. Google 展示广告
  10. LaTeX中生成标题、摘要、关键词、目录方法以及自定义所需样式
  11. C++练习 计算年份所属生肖
  12. Vue - $route matched 属性实现面包屑导航
  13. 今天我们谈谈关于java自学的那些事儿(为那些目标模糊的码农们)
  14. 笔记本购机测试软件大全
  15. 农业种植大数据平台构建
  16. TestBird《2021中国手游测试白皮书》---海外手游
  17. python大数据课程_Python课程(大数据系列)ElasticSearch从基础与实战视频课程
  18. 经验法则:回波损耗多少才算多?//学习记录
  19. Android9.0新特性
  20. bat批处理命令基础知识

热门文章

  1. 【KM匹配】 HDOJ 2853 Assignment
  2. Java编程思想第四版第六章习题
  3. 华为企业组网实例:总部与子公司之间的组网实例
  4. USACO-Section3.2 Spinning Wheels【模拟法】
  5. GPL、MIT、Apache...开发者如何选择开源协议?一文讲清根本区别
  6. 如何给你的微信公众号排版
  7. pythonpassif_Python中的正则表达式可截取特殊字符之前的所有文本
  8. AMD与Intel现在的情况20120906
  9. 题目11:给定被除数和除数,求整数商及余数。
  10. GitHub Universe 转播 | Enterprise Day 1 日程