python模拟岩石剪刀

时间:2014-05-21 04:59:04

标签: python simulation

我想写一个函数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()代码时,我得到的唯一结果就是“领带”。我该如何解决?

2 个答案:

答案 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