在for循环中运行函数

2024-04-29 10:50:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个可以掷6面骰子的模拟器:

def diceRoll6():
    return random.randint(1,6)

现在我想用一个for循环来重复这个掷骰,但也要能够改变我在函数中使用的模拟器,例如,也许我有另一个函数,掷2个骰子,然后取产品

def frequencies(sim,n):
    output = []
    for i in range(n):
        result = sim
        output.append(result)
    return output

然而,每当我运行frequencies(diceRoll6(),10)时,它只会有10次相同的输出,而不是分别运行模拟器10次并获得不同的输出


Tags: 函数inforoutputreturn产品defrandom
2条回答

将一个函数作为变量传递给另一个函数很好,您在这里做得很正确。当您调用frequencies(diceRoll6,10)sim=diceRoll6。但是,在循环中设置result=sim,然后追加result,这意味着您要在调用diceRoll6并追加结果时追加函数diceRoll610次

尝试:

def frequencies(sim,n):
    output = []
    for i in range(n):
        result = sim()
        output.append(result)
    return output

您也不会在for循环中执行sim功能。所以你实际上是把函数的结果传递给频率,而不是函数本身

所以你的意思是执行骰子滚动函数,得到它的结果并将其传递给频率。相反,您需要在不使用()的情况下将func传递给它,以便传递对func的引用而不是其结果

所以频率只是从掷骰子和n次中接收int值。所以它会将int n次附加到列表中

您需要将掷骰子功能而不是其结果传递给频率,并让频率功能为您执行n次

import random

def diceRoll6():
    return random.randint(1,6)

def frequencies(sim,n):
    output = []
    for i in range(n):
        result = sim()
        output.append(result)
    return output

print(frequencies(diceRoll6, 10))

你也可以简单地将你的频率函数设置为

def frequencies(sim,n):
    return [sim() for _ in range(n)]

相关问题 更多 >