python字符串插值与另一种方法

时间:2012-10-16 03:18:04

标签: python string loops interpolation

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

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

* ps,我想有些年份存在歧义。 “year”是我上面没写过的命令,但是它的代码使用户输入0-9999之间的数字。我将其变量名称更改为“yearint”,因为我是python的新手,并希望使描述性更强,所以当我回顾时我能记住它们。所以基本上年/年是用户输入的输入。

4 个答案:

答案 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