2

我最初的python程序使用字符串插值来获取用户在0-9999之间输入的数字,例如2928,并将其各个数字相加(2 + 9 + 2 + 8 = 21),然后拆分数字直到最终变成一个数字数字(在本例中为 3),显示在屏幕上。代码如下所示:

现在我需要找出一种方法来做同样的事情,而不使用字符串插值(将整数转换为字符串,然后拆分字符串,将它们重新转换为整数,然后对它们求和)。我对python相当陌生,因此可以使用非常简单的命令(最复杂的是while循环)有人可以帮我/给我一些想法吗?

*ps,我想关于 yearint-year 是什么存在一些歧义。“年”是我上面没有写的命令,但它的代码让用户输入 0-9999 之间的数字。我将它的变量名更改为“yearint”,因为我是 python 新手,并且想要使事情具有描述性,以便我在回顾时可以记住它们。所以基本上 year/yearint 是用户输入的输入。

4

4 回答 4

6

将模数乘以 9,并进行一些调整以考虑 9 的倍数。

>>> (123 - 1) % 9 + 1
6
于 2012-10-16T03:21:08.373 回答
1
def sumnum(num):
    if num < 10:
        return num
    return sumnum((num % 10) + sumnum(num/10))

sumnum(1234)

因为递归。这就是为什么。

于 2012-11-08T02:49:45.003 回答
0

在 Python 中,您可以循环字符串值并从字符串中获取连续字符。

 for ch in "1234":
    print (ch) 

因此,这是对字符串的数字值求和的最佳方法:

sum(int(ch) for ch in s)

在这里,我们使用“生成器表达式”调用 sum() 函数,该函数一次获取一个字符并将其转换为整数值。请注意,当您这样做时,字符串有多长并不重要。

于 2012-10-16T03:24:30.727 回答
0

我在手机上输入这个,所以我将使用“y”而不是“yearString”。

if len(y) == 4:
    x = int(y[3]) + int([2]) + int(y[1]) + int([0])
    y = str(x)

if len(y) == 3:
    x = int([2]) + int(y[1]) + int([0])
    y = str(x)

if len(y) == 2:
    x = int(y[1]) + int([0])
    y = str(x) 

answer = int(y) 

看看如果总和有多个数字,稍后的 if 语句将如何处理它。现在让我们使用纯数学编写类似的代码:

x = int(yearString) 

d3 = x // 1000
x %= 1000

d2 = x // 100
x %= 100

d1 = x // 10
d0 = x % 10

answer = d3 + d2 + d1 + d0

编辑:现在我已经考虑过了,我想我看到了你这样做的最佳方式。我不会为此编写完整的代码。

如果您使用模数运算符 10,您会拉出底部数字。然后,如果您使用整数除以 10,则删除底部数字。在 while 循环中执行此操作并继续执行此操作,直到所有数字都输出为止;在最后一次除以 10 后,该数字将为零。创建一个执行此操作的函数,并从 while 循环中调用它,直到总和小于 10(是单个数字)。

编辑:好的,我想我不妨写完整的代码:

y = int(yearString)
x = 0  # we will accumulate the sum in x
while y != 0:
    x += y % 10  # add one digit
    y //= 10  # discard one digit
    if y == 0 and x > 10:
        # We have pulled out all the digits from y, but x has
        # multiple digits.  Start over so we can sum the digits
        # from x.
        y = x
        x = 0

answer = x
于 2012-10-16T04:07:20.580 回答