python实验——第八次

设计和实现聪明的尼姆游戏(人机对战)

实验目的

(1)理解尼姆游戏规则。
(2)了解多个函数的定义与调用。
(3)理解并熟练运用w h i l e循环。
(4)理解带e l s e子句的循环结构执行流程。
(5)理解循环语句中的b r e a k语句的作用。
(6)了解使用循环和异常处理结构对用户输入进行约束的用法。
(7)养成时刻注意各级代码缩进级别的习惯。

实验内容

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

from math import log2
from random import randint,choice

def everystep(n):
    half = n / 2
    m = 1
    possible = []
    while True:
        rest = 2**m - 1
        if rest >= n:
            break
        if rest >= half:
            possible.append(n-rest)
        m=m+1
    if possible:
        return choice(possible)
    return randint(1,int(half))
def smartNimuGame(n):
    while n>1:
        print("Now it's your turn, and we have {0} left.".format(n))
        while True:
            try:
                num = int(input('How many do you want to  take:'))
                assert 1 <= num <= n//2
                break
            except:
                print('Error. Must be between 1 and {0}'.format(n//2))
        n-=num
        if n==1:
            return 'I fail.'
        n -= everystep(n)
    else:
        return 'Ýou fail'

print(smartNimuGame(randint(1,100)))

转至:https://blog.csdn.net/qq_45242225/article/details/102810037

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值