Python 3.x 玩家和电脑尝试移除1-3,直到数字达到0。如何确保电脑每次都赢?

Python 3.x 玩家和电脑尝试移除1-3,直到数字达到0。如何确保电脑每次都赢?,python-3.x,Python 3.x,将随机导入为r numb=r.randint(20,30) mylist=[1,2,3] 打印('起始编号:',无编号) 尽管如此: playerremove=int(输入('要删除多少?必须为1-3')) 麻木-=玩家移动 打印(麻木,“左”) 如果numb这是一个递归问题。要查看获胜条件,我们可以从最简单的情况开始,即玩家将数字降到1。另一个玩家现在唯一的选择是1,因此他们将失去控制。相反地,如果我们将数字带到(2,3,4)中的任何一个,那么另一个玩家有机会将其带到1,我们就输了。因此,我们

将随机导入为r
numb=r.randint(20,30)
mylist=[1,2,3]
打印('起始编号:',无编号)
尽管如此:
playerremove=int(输入('要删除多少?必须为1-3'))
麻木-=玩家移动
打印(麻木,“左”)

如果numb这是一个递归问题。要查看获胜条件,我们可以从最简单的情况开始,即玩家将数字降到
1
。另一个玩家现在唯一的选择是
1
,因此他们将失去控制。相反地,如果我们将数字带到
(2,3,4)
中的任何一个,那么另一个玩家有机会将其带到
1
,我们就输了。因此,我们可以总结到目前为止:将数字降低到

  • <代码>1
将导致获胜
  • 。。。任何
    (2,3,4)
    都会导致失败
  • 接下来,如果我们把数字带到
    5
    ,那么另一个玩家必须把它带到
    (2,3,4)
    中的任何一个,我们再次获胜<代码>(6、7、8)导致失败的原因与上述类似。更一般地说,我们可以说中奖号码是(我们做出选择后的号码):

    这意味着,如果可能的话,为了赢得比赛,球员需要根据自己的选择打出下一个中奖号码。请注意,如果当前号码已经是中奖号码,这将是不可能的。因此,最佳选择是:

    max_choice = 3
    choice = (current_value - 1) % (max_choice + 1)
    choice = max(choice, 1)
    
    最后一行
    choice=max(choice,1)
    是必需的,因为如果
    当前_值
    已经是中奖号码,则最佳选择将导致
    0
    ,但这是游戏规则所禁止的;在这种情况下,无论选择什么号码,其他玩家现在都有机会获胜


    根据上述论点,如果起始号码是在
    (20,30)
    范围内随机选择的,则计算机没有确定的获胜策略,因为如果起始号码是
    (21,25,29)
    中的一个,则计算机必然会达到一个非获胜号码,无论选择如何。

    问问自己,如果号码是5,如何获胜。我已经测试了这段代码,但它并没有真正起作用,如果您可以编写整个代码,可以吗?因为我不完全确定在哪里添加您建议的新代码行。@Victor10只需将计算
    compremove
    的整个部分替换为以下内容:
    compremove=(numb-1)%4或1
    max_choice = 3
    choice = (current_value - 1) % (max_choice + 1)
    choice = max(choice, 1)