在 Python 3 中使用和不使用 return() 时获得不同的结果



所以我在另一个网站上做练习题时偶然发现了这个问题。前提是我需要将数字数组四舍五入到最接近的 5 的倍数。

如果数字小于 38,则不会发生舍入。 如果大于 38,请检查grades[x]与最接近的 5 倍数之间的差值是否小于 5。如果为 true:向上舍入,否则不四舍五入

我的问题是:如果我输入 4、73、67、38、33、38,即使它应该四舍五入,也不会四舍五入。但是,当我删除该行return(grades)它将正确舍入。我似乎不明白为什么。谁能帮忙?

def gradingStudents(grades):
for x in range(n):
if grades[x] >= 38:
if grades[x] % 5 >= 3:
grades[x] = grades[x]+5-grades[x]%5
return(grades)
f = open(os.environ['OUTPUT_PATH'], 'w')
n = int(input())
grades = []
for _ in range(n):
grades_item = int(input())
grades.append(grades_item)
result = gradingStudents(grades)
f.write('n'.join(map(str, grades)))
f.write('n')
f.close()

你在循环中return(grades)。因此,循环不会完成并过早退出函数。将return移出循环:

def gradingStudents(grades):
for x in range(n):
if grades[x] >= 38:
if grades[x] % 5 >= 3:
grades[x] = grades[x]+5-grades[x]%5
return(grades)

如果您不想修改输入参数,请执行如下操作:

def gradingStudents(grades):
return [x+5-x%5 for x in grades if x >= 38 and x%5 >= 3]

最新更新