当我运行我的代码python只是坐在那里,并没有打印任何东西

时间:2016-11-21 03:02:51

标签: python function loops nested average

  

练习:从字符串的后面开始查找可能导致数字大于或等于100的所有数字,然后停止并找到之前的数字的平均值

def avgBackwList(values):
    total = 0
    for i in range(1,len(values)+1):
        while values[-i] <= 100:
            total = total + int(values[-i])
    return (total/i)

values = [110,2,4]
print(avgBackwList(values))

3 个答案:

答案 0 :(得分:1)

该行

        while values[-i] <= 100:
只要values[i]小于或等于100,

就会导致函数循环。因为while块中的任何内容都不会更改values[i],如果完全输入了循环它永远不会终止。

您的功能存在其他问题,这意味着它无法正常工作,但首先,您可以尝试将该行更改为

        while total <= 100:

...至少有可能终止,因为total块内的while已被更改。

答案 1 :(得分:0)

函数中的while循环计算bool值[-1]&lt; = 100.因为这是真的,它永远不会打破循环。

答案 2 :(得分:0)

您创建了一个无限while循环。你的while循环的条件是:

while values[-i] <= 100:

为了使这个循环到达每一端,最终values[-i] <= 100需要评估为False。但是,i在您的情况下永远不会有机会更改,因为while循环需要完成for循环才能继续。为了更清楚地了解发生的情况,请遵守以下内容:

In [8]: for i in ['a', 'b', 'c']:
   ...:     print(i)
   ...:     j = 0
   ...:     while j < 5:
   ...:         print(j)
   ...:         j += 1

a
0
1
2
3
4
b
0
1
2
3
4
c
0
1
2
3
4

换句话说,for循环到达值'a',然后while循环完成0-4,然后外循环for循环到'b',依此类推。为了您的利益,我不想为您解决您的家庭作业。我会说,关于您当前的代码,您需要找到一种方法来最终while条件False,而不依赖于外部for循环生成的值的更改。