我想编写一个程序,可以计算整数之和以及计算其数字。它会一直这样做,直到它成为一位数字。
例如,如果我输入453,则其总和将为12和数字3。
然后它将计算12=1+2=3
的总和,它将继续这样做直到它成为一位数。我做了第一部分,但我无法使用While连续运行它。任何帮助将不胜感激。
def main():
Sum = 0
m = 0
n = input("Please enter an interger: ")
numList = list(n)
count = len(numList)
for i in numList:
m = int(i)
Sum = m+Sum
print(Sum)
print(count)
main()
答案 0 :(得分:0)
有一些棘手的事情需要注意。希望这段代码能让你朝着正确的方向前进。您需要对总和中剩余的位数有条件。另一件事是你需要在strings
和int
之间来回转换。我在此修复了while
循环,但string
< - > int
问题仍然存在。祝你好运!
def main():
count = 9999
Sum = 0
m = 0
n = input("Please enter an integer: ")
numList = list(n)
while count > 1:
count = len(numList)
for i in numList:
m = int(i)
Sum = m+Sum
print(Sum)
print(count)
# The following needs to be filled in.
numlist = ???
main()
答案 1 :(得分:0)
您可以在不重复字符串解析的情况下执行此操作:
import math
x = 105 # or get from int(input(...))
count = 1 + int(math.log10(x))
while x >= 10:
sum = 0
for i in xrange(count):
sum += x % 10
x /= 10
x = sum
最后,x将是所描述的一位数字,而count是原始数字。
答案 2 :(得分:0)
我想赞扬this stackoverflow question以简明扼要的方式总结数字的数字,以及上面的答案,让您对解决方案有所了解。
这是我写的代码,包含函数和所有代码。理想情况下,你应该能够重用函数,这里函数digit_sum(input_number)被反复使用,直到返回值的大小(即:length,如果sum_of_digits被读为字符串)是1.现在你可以使用while循环继续检查直到你想要的大小,然后中止。
def digit_sum(input_number):
return sum(int(digit) for digit in str(input_number))
input_number = input("Please enter a number: ")
sum_of_digits = digit_sum(input_number)
while(len(str(sum_of_digits)) > 1):
sum_of_digits = digit_sum(input_number)
output = 'Sum of digits of ' + str(input_number) + ' is ' + str(sum_of_digits)
print output
input_number = sum_of_digits
答案 3 :(得分:0)
这是使用递归函数
def sumo(n):
sumof = 0
while n > 0:
r = n%10 #last digit
n = n/10 # quotient
sumof += r #add to sum
if sumof/10 == 0: # if no of digits in sum is only 1, then return
return sumof
elif sumof/10 > 0: #else call the function on the sumof
sumo(sumof)
答案 4 :(得分:0)
可能第一个诱惑就是写
while x > 9:
x = sum(map(int, str(x)))
字面意思是“直到只有一位数字用数字之和代替x”。
从性能的角度来看,应该注意计算数字的数字是一个复杂的操作,因为Python(和一般的计算机)以二进制形式存储数字,理论上每个数字需要提取模10操作
因此,如果输入不是一个开头的字符串,你可以减少计算次数,注意如果我们对最终总和感兴趣(而不是中间过程的结果),那么顺序并不重要其中数字被求和,因此可以直接计算结果,而不是首先将数字转换为字符串并且每次“通过”
while x > 9:
x = x // 10 + x % 10
从数学的角度来看,这个成本与将数字转换为字符串大致相同。
此外,不是只计算一个数字,而是可以在更大的块中工作,仍然使用数学而不是转换为字符串,例如
while x > 99999999:
x = x // 100000000 + x % 100000000
while x > 9999:
x = x // 10000 + x % 10000
while x > 99:
x = x // 100 + x % 100
while x > 9:
x = x // 10 + x % 10
第一个循环一次工作8个数字,第二个循环每次工作4个,第二个循环一次工作一个数字。将中间级别转换为if
而不是while
也是有意义的,因为大多数情况下,一次处理n
个数字后,结果将具有n
个或更少的数字,只为第一阶段和最后阶段留下while循环。
请注意,此时的计算速度非常快,以至于Python通用开销成为最重要的部分,因此无法获得更多。
答案 5 :(得分:0)
这不是最有效的方式,但在这里并不重要;对我来说,通过递归优雅地解决这个问题:)
def sum_digits(n):
n = str(n)
if int(n) < 10:
return n
else:
count = 0
for c in n:
count += int(c)
return sum_digits(count)
print sum_digits(123456789) # --> 9 # a string
有点难读:
def sum_digits2(n):
if n < 10:
return n
else:
return sum_digits2(sum(int(c) for c in str(n))) # this one returns an int
答案 6 :(得分:0)
您可以定义一个函数来查找总和,并将参数更新为最新的总和,直到您达到一位数。
def splitSum(num):
Sum = 0
for i in str(num):
m = int(i)
Sum = Sum + m
return str(Sum)
n = input("Please enter an integer: ")
count = 0
while count != 1:
Sum = splitSum(n)
count = len(Sum)
print(Sum)
print(count)
n = Sum