while循环不在python中循环

时间:2015-04-09 05:54:07

标签: python while-loop

简单循环,不按预期工作。我正在尝试创建一个模拟一个骰子的函数,并保持结果的总计,直到该总和> = m,此时它应该停止。我想知道最终总数是多少,以及到达那里需要多少卷。

目前它滚动两次,并报告总和9.我已经检查了循环外的代码并且它做了它应该做的事情(也就是说,这3行:r = rdm.randint(1,6)tot += rrolls.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

3 个答案:

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