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)