我有以下代码:
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 然后它会在程序的其余部分运行,而不会提示我将下一个测试分数添加到分数列表中。我真的很好奇为什么会这样
提前感谢您抽出时间提供帮助
此致 〜达斯汀
答案 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