python 模拟石头剪刀布
我想写一个叫做simul()的函数,这个函数接收一个整数,然后模拟玩家1和玩家2之间进行n轮石头剪刀布的游戏。赢得最多轮次的玩家就是这n轮游戏的胜者,当然也可能出现平局。
举个例子:
simul(1) 玩家1获胜
simul(1) 平局
simul(100) 玩家2获胜
我写了:
def rps():
lst['R', 'P', 'S']
p1=random.choice(lst)
p2=random.choice(lst)
if p1+p2=='RS' or p1+p2=='PR' or p1+p2=='SP':
return '-1'
elif p1+p2=='RP' or p1+p2=='PS' or p1+p2=='SR':
return '1'
else:
return '0'
def simul(n):
total=0
for i in range(n):
if rps()==-1:
total+=-1
elif rps()==1:
total+=1
else:
total+=0
if total<0:
print('Player1')
elif total==0:
print('Tie')
else:
print('Player2')
但是当我运行simul()这个代码时,得到的结果总是'平局'。我该怎么解决这个问题呢?
2 个回答
2
你有两个问题。第一个问题是你返回的是字符串:
if p1+p2=='RS' or p1+p2=='PR' or p1+p2=='SP':
return '-1'
elif p1+p2=='RP' or p1+p2=='PS' or p1+p2=='SR':
return '1'
else:
return '0'
但是你却用整数来比较结果:
if rps()==-1:
total+=-1
elif rps()==1:
total+=1
else:
total+=0
整数和它的文本表示(也就是字符串)是不能直接相等的。你应该从 rps
返回整数,而不是字符串。
第二个问题是在 simul
中,如果没有走 rps()==-1
这个分支,你会为第二次检查模拟另一轮游戏:
if rps()==-1:
total+=-1
elif rps()==1:
total+=1
每次循环只模拟一轮,并在两个检查中使用这一轮的结果:
for i in range(n):
result = rps()
if result == -1:
total += -1
elif result == 1:
total += 1
else:
total += 0
2
在函数 rps()
中,你返回的是字符串,但是在函数 simul()
中,你却把 rps()
的结果和整数进行比较。
因为你使用了 -1, 0 和 1
这些数字,所以你应该返回整数,而不是字符串。
def rps():
lst['R', 'P', 'S']
p1=random.choice(lst)
p2=random.choice(lst)
if p1+p2 == 'RS' or p1+p2 == 'PR' or p1+p2 == 'SP':
return -1
elif p1+p2 == 'RP' or p1+p2 == 'PS' or p1+p2 == 'SR':
return 1
else:
return 0
注意:在Python中,使用 '单引号'
、"双引号"
和 """三重引号"""
来表示字符串。