【问题标题】:Getting a different result when using and not using return() in Python 3在 Python 3 中使用和不使用 return() 时得到不同的结果
【发布时间】: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


【解决方案1】:

你有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]

【讨论】:

  • @JoshDetwiler 我不明白人们怎么会误以为这是一个元组。我不认为这是一个重要的问题。
  • @JoshDetwiler 我不同意这种混淆。 Return 是一个函数,因此许多人将成绩放在括号中是有意义的。
  • @JoshDetwiler 我明白了!下次不写了
  • 感谢大家的帮助!
  • @IcyBloom 我的荣幸。还可以考虑stackoverflow.com/questions/50803272/… 评论。 通常当函数修改输入参数时,它也不会返回它(除非您记录此行为)。此外,嵌套的if 可以使用逻辑and 组合成一个if。最后,考虑使用列表推导:stackoverflow.com/q/20639180/8033585
猜你喜欢
  • 2018-08-01
  • 2020-11-30
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多