Python 重复一个函数 n 次会重复同一个函数

时间:2021-04-24 08:28:30

标签: python loops random

我有这个代码,它随机选择列表中的一个项目并按照规则相互匹配。我想重复匹配 N 次,并计算存储在变量 tie 和 diff 中的事件发生了多少次。

问题在于,目前,它重复了 N 次相同的结果,而不是不同的匹配。如果我 sate range(10) 它将重复相同的匹配结果 10 次。我想重复比赛N次,结果不一样。

import random

rules = ['rock', 'paper', 'scissors']
pc1 = random.choices(rules)
pc2 = random.choices(rules)
tie = 0
diff = 0

def match():
    if pc1 == pc2:
        return False
        print('tie')
    if pc1 != pc2:
        return True
        print('different') 

for _ in range(10):
    if match() == False:
        tie +=1
    if match() == True:
        diff +=1
    
print(tie, diff)

1 个答案:

答案 0 :(得分:1)

  1. 您只随机选择 pc1 和 pc2 一次。要从列表中每次选择随机元素,您应该在函数 random.choices 中使用 match
  2. 如果你想获取一个元素,你应该使用 random.choicerandom.choices 返回一个类似 ['rock'] 的列表,random.choice 将返回元素本身,例如'rock'
  3. 您在 for 循环中调用了两次函数,这会导致 random.choice 被调用两次,结果可能不同。一种解决方案是将函数调用结果放在一个变量中(如 match_result = match()),然后在 if 中进行比较。

考虑到这些因素,代码看起来像这样:

import random

rules = ['rock', 'paper', 'scissors']
tie = 0
diff = 0


def match():
    pc1 = random.choice(rules)
    pc2 = random.choice(rules)
    if pc1 == pc2:
        return False
        print('tie')
    if pc1 != pc2:
        return True
        print('different')


for _ in range(10):
    match_result = match()
    if match_result == False:
        tie += 1
    if match_result == True:
        diff += 1

print(tie, diff)