我是python中的完整(GCSE)初学者。 我试图在整数中添加数字。我的变量FNT每次出现一个不同的数字(取决于我之前输入的内容),然后我需要添加数字。例如。 FNT = 19 我现在需要这个数字 - 1 + 9 = 10 1 + 0 = 1数字需要保持自我添加,直到它们是单个数字,但每次数字可能不同。非常感谢所有帮助,但正如我所说,我是一个完全的初学者,可能无法理解任何过于复杂的东西,所以有人知道如何做到这一点吗?
答案 0 :(得分:2)
有两种方法:数学方法和使用字符串在python中迭代的事实的方式。
数学方法使用modulo(%
)和积分除法(//
)将数字分解为数字:
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)
您可以使用divmod
功能改进此代码:
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)
可迭代的字符串方式:
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(删除input
和print
)是:
>>> 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
答案 1 :(得分:0)
要对数字的所有数字求和,您可以尝试这样的单行:
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
现在存储您的结果。
答案 2 :(得分:0)
这可能不是最优化的,但应该这样做:
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](注意这些现在是整数)
答案 3 :(得分:0)
有更好的方法可以做到这一点,但作为编程练习,这应该会给你一些见解。
while digits>10:
t=0
for c in str(digits):
t+=int(c)
digits=t
将输入数字转换为字符串并迭代数字,重复直到答案为单个数字。
答案 4 :(得分:0)
这是在java中完成的,但它仍然与python中使用的逻辑相同。
我使用split
来分割数字,然后我将每个分割数转换为整数,并将它们相加。我现在使用if statement
来检查总和是否大于或等于10.如果是,那么我再次重复该过程。
这是程序
String num = "19"; //you can make use of any value here
String array1[] = num.split("");
int sum = 0;
for (int i = 1; i <= num.length(); i++) {
sum = sum + Integer.parseInt(array1[i]); //converting each element to an integer then sum it up.
}
if (sum >= 10) {
String newnum = sum + ""; //converting the sum to a string
String newarray[] = newnum.split("");
int newsum = 0;
for (int i = 1; i <= newnum.length(); i++) {
newsum = newsum + Integer.parseInt(newarray[i]);
}
System.out.println( newsum);
}else{
System.out.println(num);
}
<强>输出强>
1