gpt4 book ai didi

python - 如何在 python 中重复查找每个 T 数字的数字总和的数字总和,直到它成为一个数字?

转载 作者:行者123 更新时间:2023-11-28 22:16:41 25 4
gpt4 key购买 nike

这是我编写的代码,用于从重复次数的数字中获取数字总和,直到总和低于 10:

T = int(input())
for i in range(T):
N = int(input())
def P():
M = [int(d) for d in str(N)]
N = sum(M)
if N<10:
print(N)
else :
return P()
P()

在运行这段代码时,它给我一个错误,如:

 Traceback (most recent call last): 
File"C:/Users/AdityaShrivastava/AppData/Roaming/Python/Python36/Scripts/tes
ting.py", line 11, in <module>
P()
File "C:/Users/Aditya
Shrivastava/AppData/Roaming/Python/Python36/Scripts/testing.py", line 5, in
P
M = [int(d) for d in str(N)]
UnboundLocalError: local variable 'N' referenced before assignment

最佳答案

您正在使用递归来解决这个问题。简单地使用循环更有效:

def gimmeNumber(text):
""""Helper: Asks for input until valid integer number is inputted. Retuns the number"""
while True:
T = input(text).strip()
if T and T.isdigit():
T = int(T)
break
print("Thats not a number ...")
return T

def sumDigits(number):
return sum(int(x) for x in str(number))

T = gimmeNumber("How many numbers? ")
for _ in range(T):
s = 0
N = gimmeNumber("Give me a number: ")
# calculate the cross-sum
s = sumDigits(N)
while s > 9: # repeat while greater then 9
s = sumDigits(s)

print(s)

输入:4,然后是 999,888,333,111

输出:

9
6
9
3

正如@Arne 建议的那样,将 gimmeNumber(text) 改为使用 try/except 更适合 python Ask forgiveness not permission心态,我同意。

不过,上面的变体也可以工作,而且对于初学者来说更容易理解。这是 try/except 一个:

def gimmeNumber(text):
""""Helper: Asks for input until valid integer number is inputted. Retuns the number"""
while True:
try:
T = int(input(text).strip())
break
except ValueError as e:
print("Thats not a number ...")
return T

有关输入验证的更多信息,我建议阅读 Asking the user for input until they give a valid response 的答案。 .

关于python - 如何在 python 中重复查找每个 T 数字的数字总和的数字总和,直到它成为一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52024916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com