我目前正在制作像石头剪刀一样的游戏。为此,我考虑使用randint()函数生成随机数。但是我想让它变得更好,以便程序记住球员过去的选择历史并与之对抗。我怎么能这样做?我是初学者,但如果以正确的方式指出,我已准备好学习。
我尝试过使用条件概率的概念,到目前为止它还没有按预期工作。
def probable(model,test_model):
p={}
for i in 'rps':
check_sequence=test_model+i
if model.count(test_model)==0:
return -1
p[i]=(model.count(check_sequence)/model.count(test_model))
if p[max(p)]==0:
return -1
else:
return max(p)
这里变量“test_model”包含过去玩家做出的选择。变量“模型”包含用户做出的整个选择列表。
答案 0 :(得分:2)
您可以使用简单的数组来解决此问题。例如,如果为所有随机选择声明一个数组,如
choices = ['r', 's', 'p']
如果你在0和len(选择)之间随机整数,它将选择其中一个。如果你想记住过去的选择,你可以简单地添加/删除每个选择到数组。例如,如果玩家玩“r”,您可以在选项中添加“p”,并且选择的概率会增加。
choices.append('p')
现在你的选择数组是这样的
['r', 's', 'p', 'p']
但是每次你需要检查数组中是否存在'r','s'和'p'中的至少一个。此外,如果您将相同的选项添加到此数组中,则可能会选择最后添加的数组。所以你可能需要调整问题阵列。
这是我的解决方案:
import random
probs = ['r', 's', 'p']
opposites = {'r':'p', 'p':'s', 's':'r'}
beats = {'r':'s', 'p':'r', 's':'p'}
def controlProbs():
if 'r' not in probs:
probs.append('r')
if 's' not in probs:
probs.append('s')
if 'p' not in probs:
probs.append('p')
def adjustProbs(choice):
if len(probs) > 20:
probs.remove(choice)
controlProbs()
else:
probs.append(beats[choice])
def pick():
index = random.randint(0, len(probs)-1)
return probs[index]
def controlInput(player):
if len(player) != 1 or player not in 'rsp':
return False
return True
while True:
player = raw_input("Pick your equipment!: ")
if not controlInput:
print "Please choose a valid one! (r, s, p)"
continue
computer = pick()
print "My choice is: " + computer
if opposites[player] == computer:
print "You beat me!"
elif opposites[computer] == player:
print "I beat you!"
else:
print "Tie :)"
#Here is adjusting probobalities
adjustProbs(player)
对于这个解决方案,你得到了那个输出:
Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: p
You beat me!
Pick your equipment!: r
My choice is: s
I beat you!
Pick your equipment!: r
My choice is: s
I beat you!
Pick your equipment!: r
My choice is: s
I beat you!
Pick your equipment!:
希望我的回答是可以理解的!
注意:我的解决方案肯定可以升级。这不是最好的,而是简单的。