【发布时间】:2020-11-23 18:32:43
【问题描述】:
您好,我正在用 Python 做整数练习,但我不太了解练习背后的逻辑。这是练习的描述:
对于这个问题,如果最右边的数字是 5 或更大,我们会将 int 值向上舍入到 10 的下一个倍数,因此 15 向上舍入到 20。或者,如果它的最右边,则向下舍入到 10 的前一个倍数digit 小于 5,因此 12 向下舍入为 10。给定 3 个整数 abc,返回它们舍入值的总和。为避免代码重复,请编写一个单独的帮助程序“def round10(num):”并调用 3 次。将帮助程序完全写在与 round_sum() 相同的缩进级别的下方。
这是代码:
def round_sum(a, b, c):
def round10(n):
return (n+5)/10*10
return round10(a) + round10(b) + round10(c)
预期输出: round_sum(16, 17, 18) → 60 我在编码蝙蝠上运行了代码,它按预期工作,但我不理解round10方法的逻辑,而且,当我在我的计算机而不是编码蝙蝠站点中运行代码时,输出为 66.0
【问题讨论】:
-
小心
/除法,它在 Python 中可以返回一个浮点数。如果你做5/4,答案是1.25而不是1。如果你想进行整数除法,你应该使用//。因此,您可以使用return (n+5)//10*10修复round10()函数 -
这是一个错字,感谢您的更正,但我真的不明白该方法实际上如何向上或向下取整的逻辑@JacobK
-
因此
(n+5)//10*10中的(n+5)部分允许//10部分正确舍入到数字。例如,如果n=13、n+5等于 18,那么当您将整数除以 10//10时,答案是 1。如您所见,1.8 向下舍入为 1,这意味着 10 的倍数舍入为 13 10 而不是 20。基本上,如果最右边的数字 >= 5,则//10结果比最右边的第二个数字大 1。如果最右边的数字 //10 结果与第二个最右边的数字相同。
标签: python python-3.x logic