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

2023-11-19

实验原理与内容:

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

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

        在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是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/2
    m = 1
    # 所有可能满足的取法
    possible = []
    while True:
        # 机器取走剩下后的数量
        rest = 2**n - 1
        if rest >= n:
            break
        # 剩下的数量大于一半,则取走的不超过一半
        if rest >= half:
            possible.append(n-rest)
        m = m + 1
    #     如果至少存在一种取法使得剩下物品数量为 2*n-1
    if 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//2
                break
            except:
                print("错误,必须在1到{0}".format(n//2))
        n-=num
        if n==1:
            return '我(计算机)输了'
        # 计算机玩家拿走一些
        n -= everyStep(n)
    if n == 1:
        return '你输了'

print(smartMinGame(randint(1,100)))

运行演示:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • 如何(重新)命名 pandas 数据框中的空列标题而不导出到 csv

    我有一个熊猫数据框df1带有一个索引列和一系列未命名的值 我想为未命名的系列指定一个名称 到目前为止 我知道的唯一方法是导出到df1 csv using df1 to csv df1 csv header Signal 然后使用以下命令重新
  • scipy.optimize on pandas dataframe

    我试图搜索它 但结果很差 有人可以向我解释一下如何在 Pandas DataFrame 上执行 optimize minimize 以便最小化 DataFrame 中的类别和结果列之间的错误 考虑这个例子 import pandas as
  • Python 转换矩阵

    我有一个如下所示的列表 2 1 3 1 2 3 1 2 2 2 我想要的是一个转换矩阵 它向我显示如下序列 1 后跟 1 的频率是多少 1 后面跟着 2 的频率是多少 1 后跟 3 的频率是多少 2 后跟 1 的频率是多少 2 后跟 2 的
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • 使用 NumPy 编写一个函数来计算具有特定公差的积分

    我想编写一个自定义函数来以特定容差对表达式 python 或 lambda 函数 进行数字积分 我知道与scipy integrate quad人们可以简单地改变epsabs但我想使用 numpy 自己编写该函数 From 这篇博文 htt
  • 在linux上安装python ssl模块,无需重新编译

    是否可以在已经安装了 OpenSSL 的 Linux 机器上安装 python 的 SSL 模块 而无需重新编译 python 我希望它就像复制几个文件并将它们包含在库路径中一样简单 Python版本是2 4 3 谢谢 是否可以在已经安装了
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 数据框中 .map(str) 和 .astype(str) 有什么区别

    我有一个数据框 其列名为 col1 和 col2 的整数类型条目 我想将 col1 和 col2 的条目以及其间的 点 连接起来 我搜索并发现添加两个列条目 df col df col1 map str df col2 map str 并添
  • 类型错误:此 COM 对象无法自动执行 makepy 过程 - 请为此对象手动运行 makepy

    这是什么错误 回溯错误 C Users DELL PycharmProjects MyNew venv Scripts python exe C Users DELL PycharmProjects MyNew agaaaaain py T
  • 是否可以在Python中将日+月(不是年)与当前日+月进行比较?

    我正在获取 5 月 10 日 格式的数据 我试图弄清楚它是今年还是明年 该日期仅一年 因此 5 月 10 日表示 2015 年 5 月 10 日 而 5 月 20 日表示 2014 年 5 月 20 日 为此 我想将字符串转换为日期格式并进
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 如何通过 Python Requests 库使用基本 HTTP 身份验证?

    我正在尝试在 Python 中使用基本的 HTTP 身份验证 我正在使用Requests https docs python requests org 图书馆 auth requests post http hostname auth HT
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • Python 读取未格式化的直接访问 Fortran 90 给出不正确的输出

    这是数据的写入方式 它是一个二维浮点矩阵 我不确定大小 open unit 51 file rmsd nn output form unformatted access direct status replace recl Npoints
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • 两种 ODE 求解器之间的差异

    我想知道 两者之间有什么区别ODEINT and solve ivp用于求解微分方程 它们之间有什么优点和缺点 f1 solve ivp f 0 1 y0 y0 is the initial point f2 odeint f y0 0 1
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import

随机推荐

  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(未知)阴影映射

    未完成 黑近白远 oglmanager h ifndef OGLMANAGER H define OGLMANAGER H include
  • 熄灯问题

    有一个由按钮组成的矩阵 其中每行有6个按钮 共5行 每个按钮的位置上有一盏灯 当按下一个按钮后 该按钮以及周围位置 上 下 左 右 的等都会转变状态 即 如果灯原来是点亮的 就会被熄灭 如果灯原来是熄灭的 则会被点亮 在矩阵角上的按钮改变3
  • 【3D人脸】Open3D学习笔记 一

    最近头疼于点云法向量的计算 实在找不到python的相关资料 想起来Open3D这个专门的工具 一搜还真有 踩了很多坑 记录一下 Open3D官方文档 http www open3d org docs release index html
  • uniapp(二) 之 uniapp 搭建与组件库的引用

    小扩展 rpx responsive pixel 可以根据屏幕宽度自适应 规定屏幕宽度为750rpx 如果iphon6上 屏幕宽度为375px 共有750个像素 则750rpx 375培训 750物理像素 1rpx 0 5px 1物理像素
  • 自定义类型 (结构体)

    文章目录 结构体的声明 1 结构的基础知识 2 结构的声明 3 特殊的声明 4 结构的自引用 5 结构体变量的定义和初始化 6 结构体内存对齐 7 修改默认对齐数 8 结构体传参 结构体的声明 1 结构的基础知识 结构是一些值的集合 这些值
  • Mac VSCode常用快捷键

    cmd option gt cmd option lt 返回上 下一个光标位置 cmd p 打开文件搜索框 control 返回 control shift 前进 补充
  • 工具及方法 - Process Explorer以及类似工具,用来获取系统运行的进程信息

    下载Process explorer Process Explorer Sysinternals Microsoft Learn Process explorer简介 有没有想过哪个程序打开了一个特定的文件或目录 现在你可以找到了 Proc
  • BDA初级分析——可视化图形

    一 时间趋势 时间趋势要如何呈现 Excel函数补充 YEAR 提取日期中的年份 MONTH 提取日期中的月份 DAY 提取日期中的天 HOUR 提取时间中的小时 TEXT 将数值转换为按指定数字格式表示的函数 写法 TEXT value
  • 提交表单--get与post方式

    我们经常在网页上输入信息 然后通过按钮提交 有两种提交方式 get和post get方式效率高但安全性低 post是封装后进行提交安全性高 get方式经常用于搜索 查询 post常用与用户注册登陆等 提交表单标签
  • 【Sibelius】制谱软件 (西贝柳斯)入门笔记

    首先声明 本人非音乐专业 连业余爱好者都算不上 因为小女是音乐生 为了填补代沟 所以就整点音乐相关的软件玩玩 又怕自己忘了 做个笔记 笔记主要是从B站学习的 链接 https www bilibili com video BV1Kb4114
  • 成功解决VS编译时提示“已经在 LIBCMT.lib(xxx) 中定义“

    报错信息 解决方法 在项目右击 gt 属性 gt 连接器 gt 命令行 gt 附加选项中 添加 force
  • 【小程序】使用wxParse解析html

    小程序在开发时 读取到服务器的内容是html格式的 因小程序不支持html格式的内容显示的 因此要对html格式的内容进行编译 可以通过wxParse来实现 wxParse下载地址 实现方法 将下载下来的wxParse文件夹复制到开发项目的
  • Unity(纯C语言单元测试框架!不是那个Unity3d)入门文档

    译者注 译者博客 http blog csdn net lin strong 转载请保留这条 此为Unity手册的翻译 仅供学习交流使用 请勿用于商业用途 翻译的资料是公开的 在docs UnityGettingStartedGuide m
  • 计算员工工资

    请编写一个程序 可以读取一名员工的员工编号 本月工作总时长 小时 以及时薪 并输出他的工资条 工资条中包括员工编号和员工月收入 输入格式 输入包含两个整数和一个浮点数 分别代表员工编号 工作时长以及时薪 每个数占一行 输出格式 输出共两行
  • Unreal Engine4蓝图编程学习(一)

    学习内容主要介绍了蓝图进行对象交互 升级玩家技能 升级AI敌人 跟踪游戏状态完成游戏体验等内容 内容来源于 Unreal Engine4蓝图可视化编程 书籍为2017年 与现在版本有一定区别 一 制作移动标靶 1 1 首先 我们想先创建一个
  • mysql database uri,未设置SQLALCHEMY_DATABASE_URI

    I tried to work with CURD operation using Flask and SQLAlchemy But getting Error while connecting to database Here is th
  • springboot+vue教室图书馆预约管理系统、

    下载地址 https download csdn net download ouyangxiaobai123 22176771 项目介绍 springboot vue教室图书馆预约管理系统 系统说明 聪慧物联网教室预定系统 后台系统 项目简
  • 多维数组变成一维数组

    这个问题来源于一个朋友曾经问过我的问题 当时是一个二维数组变成一维数组 后面我想整理一下 整理一个多维 并且是不定维的数组 一 二维数组变成一维数组 1 遍历数组 将元素一个个放入新数组 结果 如果元素不是数组 将会报错 下面是改良版 这样
  • 信号量和自旋锁

    信号量和自旋锁 为了避免并发 防止竞争 内核提供了一组同步方法来提供对共享数据的保护 我们的重点不是介绍这些方法的详细用法 而是强调为什么使用这些方法和它们之间的差别 Linux 使用的同步机制可以说从2 0到2 6以来不断发展完善 从最初
  • python编程实验,模拟聪明版的尼姆游戏设计原理

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