我想写一个函数simul(),它接受一个整数并在Player1和Player2之间模拟n轮Rock,Paper,Scissors。赢得最多回合的玩家赢得了n轮比赛,并且可以获得关系。
示例:
SIMUL(1) PLAYER1
SIMUL(1) 铁
SIMUL(100) Player2
我写过:
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()代码时,我得到的唯一结果就是“领带”。我该如何解决?
答案 0 :(得分:2)
在函数rps()
中,您将返回字符串,但在函数simul()
中,您正在将rps()
的结果与整数进行比较强>
由于您使用的是-1, 0 and 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使用'single quotes'
,"double quotes"
和"""triple quotes"""
来识别字符串。
答案 1 :(得分: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