简单循环,不按预期工作。我正在尝试创建一个模拟一个骰子的函数,并保持结果的总计,直到该总和> = m,此时它应该停止。我想知道最终总数是多少,以及到达那里需要多少卷。
目前它滚动两次,并报告总和9.我已经检查了循环外的代码并且它做了它应该做的事情(也就是说,这3行:r = rdm.randint(1,6)
,tot += r
, rolls.append(r)
)。
我错过了什么?
def roll(m):
rolls = []
tot = 0
while tot < m:
r = rdm.randint(1,6)
tot += r
rolls.append(r)
return tot
return rolls
return r
m=100
roll(m)
print "The number of rolls was", len(rolls)
print "The total is", tot
答案 0 :(得分:6)
似乎你对控制如何从函数返回以及如何返回值有误解。当前的问题与你的while循环无关,而是你如何处理函数的返回。
您应该了解可以有多个返回路径,但对于任何特定的执行,执行一个且仅执行一个返回,忽略顺序路径中的任何后续返回。
此外,您需要一种捕获返回值的方法,无法自动污染您的全局命名空间
所以要总结并解决你的问题,可能的出路就是
def roll(m):
rolls = []
tot = 0
while tot < m:
r = rdm.randint(1,6)
tot += r
rolls.append(r)
return tot, rolls, r
tot, rolls, r = roll(m)
print "The number of rolls was", len(rolls)
print "The total is", tot
答案 1 :(得分:0)
这应该可以正常工作,但是您为一个函数连续使用多个return语句 - 这不会起作用。函数评估return
时,该函数停止触发。如果要返回多个值,请返回元组:
def roll(m):
rolls = []
tot = 0
while tot < m:
r = rdm.randint(1,6)
tot += r
rolls.append(r)
return tot, rolls, r
m=100
a, b, c = roll(m)
print "The number of rolls was", len(b)
print "The total is", a
答案 2 :(得分:0)
您只能有一个return语句。使用逗号分隔返回值,并在使用多个赋值调用函数时将它们分配给变量。
return tot,rolls,r
当你调用函数时:
tot,rolls,r = roll(m)