【问题标题】:Codingbat roundsum Logic explanationCodingbat roundsum 逻辑解释
【发布时间】: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=13n+5 等于 18,那么当您将整数除以 10 //10 时,答案是 1。如您所见,1.8 向下舍入为 1,这意味着 10 的倍数舍入为 13 10 而不是 20。基本上,如果最右边的数字 >= 5,则//10 结果比最右边的第二个数字大 1。如果最右边的数字 //10 结果与第二个最右边的数字相同。

标签: python python-3.x logic


【解决方案1】:

请记住,在 python3 中 / 运算符除以小数,但 // 运算符不返回逗号后面的值,因此如果 n = 12。

12 + 5 = 17 // 10 = 1 * 10 -> 10

这就是向上或向下取整的方式。您也可以使用 18 对其进行测试,以便我们了解它是如何四舍五入的。

18 + 5 = 23 // 10 = 2 * 10 -> 20

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2013-07-27
    • 2015-12-20
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多