【发布时间】:2018-11-21 00:44:55
【问题描述】:
所以当我偶然发现这个问题时,我正在另一个网站上做一个练习题。前提是我需要将一个数字数组四舍五入到最接近的5的倍数。
如果数字小于 38,则不会进行四舍五入。
如果大于38,检查grades[x]与5的最接近的倍数的差是否小于5。如果为真:四舍五入,否则不四舍五入
我的问题是:如果我输入 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()
【问题讨论】:
-
如果你将函数的结果存储为
result,为什么你还在加入grades,而不是结果?无论如何,这使得返回是多余的。 -
啊是的,这是真的!但不要介意!那只是我正在学习的网站作为模板给出的代码!我相信原始模板是 f.write('\n'.join(map(str,result))) ,因为它被上下文化为喜欢运行针对成绩文本文件的脚本。但是,我无法使“结果”成为适当的可迭代对象
-
您的 return 语句缩进不正确。它在循环内部,因此导致循环过早退出。将其向左移动,使其位于循环之外。
-
另外,你真的不应该使用
for x in range(n),而应该使用for x in range(len(grades))或类似的东西 -
@user3483203 我明白了!但是,在这种情况下,n 恰好是数组等级的长度!
标签: python python-3.x return