繁体   English   中英

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

[英]python String interpolation vs another method

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

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

* ps,我想关于yearintyear是多少有些含糊。 “ year”是我上面没有写的命令,但是它的代码使用户输入0-9999之间的数字。 我将其变量名称更改为“ yearint”,因为我是python的新手,并且希望使它们具有描述性,以便我回想起它们。 因此,基本上year / yearint是用户输入的输入。

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

>>> (123 - 1) % 9 + 1
6
def sumnum(num):
    if num < 10:
        return num
    return sumnum((num % 10) + sumnum(num/10))

sumnum(1234)

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

在Python中,您可以循环输入一个字符串值,然后从该字符串中获取连续的字符。

 for ch in "1234":
    print (ch) 

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

sum(int(ch) for ch in s)

在这里,我们使用具有“生成器表达式”的功能调用sum()函数,该生成器表达式一次获取一个字符并将其转换为整数值。 请注意,以这种方式进行操作时,字符串的长度无关紧要。

我在手机上输入,因此我将使用“ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM