我原来的python程序使用字符串插值来取一个用户在0-9999之间输入的数字,如2928,并将其各个数字(2 + 9 + 2 + 8 = 21)相加,然后将数字分开,直到它最终成为一个数字的数字(在这种情况下为3),显示在屏幕上。代码如下所示:
现在我需要找出一种方法来做同样的事情而不使用字符串插值(将整数转换为字符串然后拆分字符串,将它们重新转换为整数,并将它们相加)。我是python的新手,因此可以使用非常简单的命令(最复杂的是while循环)任何人都可以帮助我/给我一些想法吗?
* ps,我想有些年份存在歧义。 “year”是我上面没写过的命令,但是它的代码使用户输入0-9999之间的数字。我将其变量名称更改为“yearint”,因为我是python的新手,并希望使描述性更强,所以当我回顾时我能记住它们。所以基本上年/年是用户输入的输入。
答案 0 :(得分:6)
将模数乘以9,并进行一些调整以计算9的倍数。
>>> (123 - 1) % 9 + 1
6
答案 1 :(得分:1)
def sumnum(num):
if num < 10:
return num
return sumnum((num % 10) + sumnum(num/10))
sumnum(1234)
因为递归。这就是原因。
答案 2 :(得分:0)
在Python中,您可以循环一个字符串值,并从字符串中获取连续的字符。
for ch in "1234":
print (ch)
所以这是对字符串的数字值求和的最佳方法:
sum(int(ch) for ch in s)
这里我们使用“生成器表达式”调用sum()函数,该表达式一次获取一个字符并将其转换为整数值。请注意,当您这样做时,字符串的长度无关紧要。
答案 3 :(得分: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