【问题标题】:python String interpolation vs another methodpython字符串插值与另一种方法
【发布时间】:2012-10-06 02:25:53
【问题描述】:

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

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

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

【问题讨论】:

  • 实际上都不是“字符串插值”。
  • 太棒了,现在它显然是一个完整的新手

标签: python string loops interpolation


【解决方案1】:

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

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

【讨论】:

  • 如果数字能被 9 整除,则此方法无效,例如 81 或 9999。
  • 哦,哇,你是怎么想到的?,我什至不知道要遵循什么思路才能得出这个结论。你的逻辑很棒。
  • 您需要将模数的结果向前“旋转” 1(即 8 -> 8, 0 -> 9, 1 -> 1),因此您需要减去 1 的模数,并且加1。
  • 我们将“0”结果旋转为“9”。
  • 好吧我现在明白了,而且我还看到 +1 用于恢复或否定 -1 的效果,因此给出的答案是适当的除以 9。谢谢你非常喜欢。
【解决方案2】:

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

 for ch in "1234":
    print (ch) 

所以这是对字符串的数字值求和的最佳方法:

sum(int(ch) for ch in s)

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

【讨论】:

  • 我不能使用“ch”或“in”或“for”
  • 谢谢,这可以进一步使用,但教练限制我们使用 ch,或在...
  • 在本例中,ch 是一个变量名。没有称为ch 的标准函数。
【解决方案3】:

我是在手机上输入的,所以我将使用“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

【讨论】:

  • 禁止转换为字符串,然后转换为整数,反之亦然。感谢您花时间在您的手机上输入上述内容。这是最值得赞赏的。如果它存在,我也不能使用“len”命令......
【解决方案4】:
def sumnum(num):
    if num < 10:
        return num
    return sumnum((num % 10) + sumnum(num/10))

sumnum(1234)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多