【问题标题】:Integer returned as sum of digits?整数作为数字总和返回?
【发布时间】:2014-05-08 22:12:12
【问题描述】:

这是我应该写的:

  • 一个函数countDigits,它将一个整数作为参数并返回其数字的总和(您必须使用for 循环)。例如,数字 123 将返回 6 (1 + 2 + 3)
  • 一个 main 函数,它将从 1 开始计算数字,并在总数字(对于所有数字)超过 1,000,000 时结束。因此,如果您想要数字 5 的总位数,您可以添加:

    • 1 = 1
    • 2 = 2 + 1
    • 3 = 3 + 3
    • 4 = 6 + 4
    • 5 = 10 + 5,所以 15 是总位数。
  • 您的程序将打印超过 1,000,000 之前的数字和位数。使用 while 循环最简单。

我已经为函数countDigits编写了代码,即:

def countDigits():
    value=int(input('Enter Integer: '))
    str_num= str(value)
    total = 0
    for ch in str_num:
        total += int(ch)
    print(total)

但是,我对如何编写 main 函数感到困惑。谁能指出我正确的方向?

编辑

这是我修改后的 countDigits 函数:

def countDigits(value):
    str_num= str(value)
    total = 0
    for ch in str_num:
        total += int(ch)
    print(total)

【问题讨论】:

  • 您的countDigits 函数不对:“countDigits,它将一个整数作为参数返回其数字的总和” .您正在获取用户输入和打印。
  • 修复countDigits后,如何编写主函数应该会变得很明显,假设您知道如何使用参数调用函数并将返回值分配给变量。
  • “谁能指出我正确的方向?”不是适合 SO 的问题。尝试一些东西,测试它,阅读并理解它给出的输出或错误,并尝试改进它。
  • 这是我希望 reduce 仍在 Python 中的极少数情况之一......
  • @AdamSmith 它还在functools

标签: python loops python-3.x


【解决方案1】:

单行:

factorial_digit_sum = lambda x: sum( sum(map(int, str(a))) for a in range(1,x+1) )

如果您曾经编写过这样的真实代码,Guido 会追捕您。不过,这对打高尔夫球来说是一种有趣的脑筋急转弯。

真正的答案:

def countDigits(number):
    return sum(map(int, str(number)))

def main():
    total = 0
    count = 1
    while total <= 1000000:
        total += countDigits(count)
    total -= countDigits(count) # you want the number BEFORE it hits 1000000
    print("Summing the digits of {}! yields {}".format(count, total))

main()

您的代码中的问题是您的countDigits 函数请求用户输入。您应该将其更改为接受整数作为参数。它还 prints 结果而不是 returning 它。

【讨论】:

  • @Kjc21793 是的,对于明显的家庭作业,我倾向于打高尔夫球以获得乐趣(就像我在这里所做的那样),或者加入一些我 99% 确定你不会有的语法学习了呢。这迫使您要么重写代码,了解它应该如何组合在一起,要么成为明显的抄袭者并面临学术制裁。
  • 你能解释一下你的答案吗?我想知道为什么它是答案,而不仅仅是复制粘贴,否则它就达不到目的。
  • @Kjc21793 但是我确实回答了一些接近有价值的格式。这仍然包含您不太可能被教过的东西(mapstr.format)所以如果您逐字复制,请准备好接受严厉的谈话:P
【解决方案2】:

正如 @Blorgbeard 在 cmets 中提到的,更改 countDigits 以接受整数作为输入。另外,从它返回总数。

在main函数中,读取输入,调用countDigits并在while循环中添加,直到总数大于1,000,000

def countDigits(value):
    str_num= str(value)
    total = 0
    for ch in str_num:
        total += int(ch)
    return total

grandTotal = 0
while ( grandTotal < 1000000 ):
  value=int(input('Enter Integer: '))
  grandTotal += countDigits(value)

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 2016-07-05
    • 2012-03-15
    • 2021-11-14
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多