Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python字符串插值与另一种方法_Python_String_Loops_Interpolation - Fatal编程技术网

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

python字符串插值与另一种方法,python,string,loops,interpolation,Python,String,Loops,Interpolation,我最初的python程序使用字符串插值来获取用户输入的介于0-9999之间的数字,比如2928,然后对其各个数字求和(2+9+2+8=21),然后拆分该数字,直到最终变成一个单位数(在本例中为3),并显示在屏幕上。代码如下所示: 现在,我需要找到一种不使用字符串插值(将整数转换为字符串,然后拆分字符串,将其重新转换为整数,然后求和)的方法来实现同样的操作。我对python相当陌生,因此可以使用非常简单的命令(最复杂的是while循环)。有人能帮我解决/给我一些想法吗 *ps,我想关于yearin

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

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


*ps,我想关于yearint-year是什么存在一些模糊性。“year”是我上面没有写过的命令,但它的代码让用户输入一个介于0-9999之间的数字。我把它的变量名改为“yearint”,因为我是python新手,我想让事情变得更具描述性,这样我回过头来就能记住它们。因此,基本上year/yearint是用户输入的输入。

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

>>> (123 - 1) % 9 + 1
6

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

 for ch in "1234":
    print (ch) 
因此,这里是对字符串的数字值求和的最佳方法:

sum(int(ch) for ch in s)

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

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

看看如果总和有多个数字,后面的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
def sumnum(num):
如果num<10:
返回数
返回sumnum((num%10)+sumnum(num/10))
sumnum(1234)

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

这些都不是真正的“字符串插值”。太棒了,现在我显然是个新手。我不能使用“ch”或“in”或“for”,谢谢,这可以进一步使用,但讲师限制我们使用ch,或者在……在本例中,
ch
是一个变量名。没有一个标准函数叫做
ch
。如果这个数字可以被9整除,那么这个方法就不起作用了,比如81或9999。哦,哇,你是怎么想到的?我甚至不知道要达到这个目的应该遵循什么思路。你的逻辑太棒了。你需要将模的结果向前“旋转”1(即8->8,0->9,1->1),所以你取1的模,然后加上1。我们正在将“0”的结果旋转为“9”。哦,我现在明白了,我还看到+1用于恢复或否定-1的效果,所以给出的答案是一个适当的除以/模9。非常感谢。我不允许先转换为字符串,然后再转换为整数或反之亦然。感谢您花时间在手机上键入上述内容。非常感谢。如果“len”命令存在,我也不能使用它。。。
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
def sumnum(num):
    if num < 10:
        return num
    return sumnum((num % 10) + sumnum(num/10))

sumnum(1234)