欢迎来到代码驿站!

Python代码

当前位置:首页 > 软件编程 > Python代码

Python实现聪明的尼姆游戏

时间:2022-04-26 09:07:58|栏目:Python代码|点击:

尼姆游戏是个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家则输掉游戏
在聪明模式中,计算机每次拿走一定数量的物品使得堆的大小是 2 的幂次方减 1—也就是 3、7、15、31、63 等。如果有一定数量的剩余物品,计算机就随机拿出一些。编写程序,模拟聪明版本的尼姆游戏。

先创建两个函数,一个用于玩家拿走商品,另一个用于电脑拿走商品。题目要求电脑要随机挑选,因此我们用到了random库中的choice方法,用法为random.choice(iterable),就是从序列中随机挑选一个元素。

import random


# 玩家拿走物品
def play(num):
    while True:
        try:
            if num == 1:
                print('请输入要拿走物品的数量(1)')
                take_num = int(input())
                assert take_num == 1
            else:
                print('请输入要拿走物品的数量(1-%d)' % (num / 2))
                take_num = int(input())
                assert 1 <= take_num <= num // 2
        except(ValueError, AssertionError):
            print('请正确输入数量!')
        else:
            break
    num -= take_num
    print('玩家拿走了', take_num, '个,还剩', num, '个')
    return num


# 电脑拿走物品
def computer(num):
    take_max = num // 2
    lst = []
    for i in range(1, num):
        temp = 2 ** i - 1
        if temp <= num - 1:
            lst.append(temp)
        else:
            break
    lst = list(filter(lambda y: num - y <= num // 2, lst))
    if lst:
        temp_lst = []
        for i in lst:
            x = num - i
            temp_lst.append(x)
        take_num = random.choice(temp_lst)
        num -= take_num
        print('电脑拿走了', take_num, '个,还剩', num, '个')
        return num
    else:
        take_num = random.randint(1, take_max)
        num -= take_num
        print('电脑拿走了', take_num, '个,还剩', num, '个')
        return num


while True:
    try:
        initial_value = int(input('请输入起始数量堆的大小:'))
    except(ValueError, AssertionError):
        print('请正确输入数量!')
    else:
        break
player = 1
computer_player = 1
# 依次循环玩家和电脑那走物品,若玩家先拿完则提前跳出循环,若电脑先拿完则正常退出循环
while computer_player and player:
    initial_value = play(initial_value)
    player = initial_value
    if player == 0 or player == 1:
        break
    initial_value = computer(initial_value)
    computer_player = initial_value
if player == 0:
    print('\n电脑胜利!')
else:
    print('电脑拿走了 1 个,还剩 0 个')
    print('\n玩家胜利!')

以上代码纯本人想法,若有更好的想法可留言一起探讨

在这里插入图片描述

上一篇:Python 正则表达式基础知识点及实例

栏    目:Python代码

下一篇:Python深度学习pytorch神经网络汇聚层理解

本文标题:Python实现聪明的尼姆游戏

本文地址:http://www.codeinn.net/misctech/200242.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有