如何整数相加

2024-04-25 00:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个完全(GCSE)的python初学者。 我想把这些数字加成整数。我的变量FNT每次都是一个不同的数字(取决于我之前输入的内容),然后我需要这些数字相加。例如。 FNT=19 我现在需要这个号码- 1+9=10 1+0=1这些数字需要不断地相加,直到它们是一个数字,但每次数字都可能不同。所有的帮助都是非常感谢的,但是,正如我所说,我是一个完全的初学者,可能无法理解任何太复杂的东西,所以有人知道如何做到这一点吗?


Tags: 内容数字整数号码初学者gcsefnt
3条回答

有两种方法:数学方法和在python中使用字符串是iterable这一事实的方法。

  • 数学方法使用模(%)和整数除(//)将数字分解为数字:

    number = int(input('What number do you want to start with? '))
    
    while number > 9:
        decompose_helper, number = number, 0
        while decompose_helper: # != 0 is implied
            number += decompose_helper % 10
            decompose_helper = decompose_helper // 10
    
    print('Result is', number)
    

    可以使用^{}函数改进此代码:

    number = int(input('What number do you want to start with? '))
    
    while number > 9:
        decompose_helper, number = number, 0
        while decompose_helper: # != 0 is implied
            decompose_helper, remainder = divmod(decompose_helper, 10)
            number += remainder
    
    print('Result is', number)
    
  • iterable字符串方式:

    number = input('What number do you want to start with? ')
    
    while len(number) > 1:
        number = str(sum(int(digit) for digit in number))
    
    print('Result is', number)
    

这两个代码都不处理输入验证,因此如果用户输入的不是整数,则代码将崩溃。你可能需要处理这个问题。


我建议用数学方法,因为它更快。Timmings(除去inputprint)是:

>>> timeit.timeit('math_way("4321234123541234")', setup='from __main__ import math_way', number=10000)
0.06196844787336886
>>> timeit.timeit('str_way("4321234123541234")', setup='from __main__ import str_way', number=10000)
0.10316650220192969

这可能不是最优化的,但它应该做到:

def addThem(FNT):
    while FNT >= 10:
        FNT = sum([int(i) for i in list(str(FNT))])
    return FNT

编辑:

如果FNT=19,list(str(FNT))返回['1','9'。

list comprehension[int(i)for i in list(str(FNT))]返回[1,9%(注意这些现在是整数)

要求一个数字的所有位数的和,您可以尝试这样的一行:

sum(int(chr) for chr in str(number))

您可以重复应用,直到结果小于10:

res = number
while True:
  res = sum(int(chr) for chr in str(res))
  if res < 10:
    break

res现在存储结果。

相关问题 更多 >