Python 在for循环中运行函数

Python 在for循环中运行函数,python,for-loop,Python,For Loop,我有一个可以掷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) re

我有一个可以掷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次并获得不同的输出。

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

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

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

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

随机导入
def diceRoll6():
返回random.randint(1,6)
def频率(sim,n):
输出=[]
对于范围(n)中的i:
结果=sim()
output.append(结果)
返回输出
打印(频率(6、10))
你也可以简单地将你的频率函数设置为

def频率(sim卡,n):
返回[sim(),用于范围(n)]

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

尝试:


您只调用了
diceRoll6
一次。我在写问题时输入了一个拼写错误,但附加在for loopah ok中,已更新以删除该部分。简而言之,您的问题是您执行函数,并且只将结果传递给frequency。您需要将函数作为引用传递,并让frequency for loop在每个循环中执行它。啊,我刚刚意识到我的错误!在最后一个函数中,我不需要没有括号的diceRoll6,然后让sim()而不是sim
diceRoll6()
调用该函数并获取返回值。比如说5。然后实际的频率是5和10,所以你得到了10个相同的数字。通过只传递不带括号的diceRoll6,可以传递对函数的引用。然后在循环中,
sim
是对
dicRoll6
的引用,每次
sim()
我在我的原始帖子中用附加行上的缩进输入一个新结果时,你都调用该函数,但是你写的东西和我写的一模一样,它仍然附加了10次相同的结果,只是注意到了不同,实际上,我有sim卡,而不是sim()
def frequencies(sim,n):
    output = []
    for i in range(n):
        result = sim()
        output.append(result)
    return output