For循环只执行1次,但范围为5

时间:2012-04-02 01:45:05

标签: python for-loop python-3.x range

我有以下代码:

def input_scores():
scores = []
y = 1
for num in range(5):
    score = int(input(print('Please enter your score for test %d: ' %y)))

    while score < 0 or score > 100:
        print ('Error --- all test scores must be between 0 and 100 points')
        score = int(input('Please try again: '))
    scores.append(score)
    y += 1
    return scores   

当我运行它时,输出如下:

Please enter your score for test 1: 
None

然后我会输入无人旁边的测试分数,比如95 然后它会在程序的其余部分运行,而不会提示我将下一个测试分数添加到分数列表中。我真的很好奇为什么会这样

提前感谢您抽出时间提供帮助

此致 〜达斯汀

5 个答案:

答案 0 :(得分:6)

你从循环中返回。向左移动return scores一个缩进。

答案 1 :(得分:3)

你的return语句缩进太多,导致函数在第一次迭代时返回。它需要在for block之外。此代码有效:

def input_scores():
    scores = []
    y = 1
    for num in range(5):
        score = int(input('Please enter your score for test %d: ' %y))
        while score < 0 or score > 100:
            print ('Error --- all test scores must be between 0 and 100 points')
            score = int(input('Please try again: '))
        scores.append(score)
        y += 1
    return scores

答案 2 :(得分:0)

你缩进代码似乎很糟糕。看起来return语句在for循环的范围内。因此,在第一次迭代之后,return语句将完全带出您的函数。

答案 3 :(得分:0)

你在每次循环迭代结束时return scores(换句话说,在第一次循环迭代完成后,你返回所有分数,从而退出函数,循环)。

将您的代码更改为:

for num in range(5):
    # ...
return scores    # Note the indentation is one tab less than the loop's contents

答案 4 :(得分:0)

其他人已经正确地指出你的return语句的缩进导致了这个问题。另外,您可能想要这样尝试,使用len(分数)来控制循环,如@max所示:

def input_scores(num_tests=5, max=100, min=0):
    scores = []
    while len(scores) < num_tests:
        score = int(input('Please enter your score for test {0}: '.format(len(scores)+1)))
        if score < min or score > max: 
            print ('Error --- all test scores must be between 0 and 100 points.')
        else:
            scores.append(score)
    return scores