Python 数学检查器中的IF循环有什么问题?

Python 数学检查器中的IF循环有什么问题?,python,if-statement,Python,If Statement,我正在为我看的一个视频做一个数学检查,基本上,你把Input1,Input2,Input3,Input4加在一起。如果总和大于9,则取整数并将它们相加,然后不断重复,直到得到一个1-9的数字。然后取Input1并进行数字加法,直到得到的单个数字小于10为止。对Input2、Input3和Input4重复此操作。然后将这四个数字相加,并重复此数字相加,直到它的单个数字小于10。检查输入1,2,3,4之和所剩的单个数字是否应分别与输入1,2,3,4的数字之和相同 这对小数字有效,但对大数字无效。我在

我正在为我看的一个视频做一个数学检查,基本上,你把Input1,Input2,Input3,Input4加在一起。如果总和大于9,则取整数并将它们相加,然后不断重复,直到得到一个1-9的数字。然后取Input1并进行数字加法,直到得到的单个数字小于10为止。对Input2、Input3和Input4重复此操作。然后将这四个数字相加,并重复此数字相加,直到它的单个数字小于10。检查输入1,2,3,4之和所剩的单个数字是否应分别与输入1,2,3,4的数字之和相同

这对小数字有效,但对大数字无效。我在结果中得到不同的数字和大于9的数字

我做错了什么

 Input1 = 16836373683333
 Input2 = 2338737938763876373897
 Input3 = 3387398737837893
 Input4 = 48739873973334556368638637876383

 Sum = Input1 + Input2 + Input3 + Input4

 Sum = str(Sum)
 Sum = list(Sum)
 Sum = list(int(digit) for digit in Sum)
 Sum = sum(Sum)

 if Sum > 9:
     Sum = str(Sum)
     Sum = list(Sum)
     Sum = list(int(digit) for digit in Sum)
     Sum = sum(Sum)

 Input1 = str(Input1)
 Input1 = list(Input1)
 Input1 = list(int(digit) for digit in Input1)
 Input1 = sum(Input1)

 if Input1 > 9:
     Input1 = str(Input1)
     Input1 = list(Input1)
     Input1 = list(int(digit) for digit in Input1)
     Input1 = sum(Input1)

 Input2 = str(Input2)
 Input2 = list(Input2)
 Input2 = list(int(digit) for digit in Input2)
 Input2 = sum(Input2)

 if Input2 > 9:
     Input2 = str(Input2)
     Input2 = list(Input2)
     Input2 = list(int(digit) for digit in Input2)
     Input2 = sum(Input2)

 Input3 = str(Input3)
 Input3 = list(Input3)
 Input3 = list(int(digit) for digit in Input3)
 Input3 = sum(Input3)

 if Input3 > 9:
     Input3 = str(Input3)
     Input3 = list(Input3)
     Input3 = list(int(digit) for digit in Input3)
     Input3 = sum(Input3)

 Input4 = str(Input4)
 Input4 = list(Input4)
 Input4 = list(int(digit) for digit in Input4)
 Input4 = sum(Input4)

 if Input4 > 9:
     Input4 = str(Input4)
     Input4 = list(Input4)
     Input4 = list(int(digit) for digit in Input4)
     Input4 = sum(Input4)

 NewSum = Input1 + Input2 + Input3 + Input4

 if NewSum > 9:
     NewSum = str(NewSum)
     NewSum = list(NewSum)
     NewSum = list(int(digit) for digit in NewSum)
     NewSum = sum(NewSum)

 print Sum
 print NewSum
 if Sum == NewSum:
     print 'Checks out!'
 else:
     print 'Does not check out'
这里的主要问题(除了可怕的复制/粘贴之外)是
if x>9
测试不在循环中

因此,如果某个数字高于9,则会减小其值,但不能确保它不仍然高于9(这说明它适用于较小的值)

我的建议(如评论中所述,相当简短:)


两个结果我都得到6分。退房

如果
不是循环。该死,复制/粘贴太多了。我可以把你的代码写成10行。至少调试起来会更容易。如果您想在每个条件都为真的情况下循环,请将
If
s替换为
while
s。@Blckknght谢谢!我永远不会忘记,伙计!
nums = [16836373683333, 2338737938763876373897, 3387398737837893, 48739873973334556368638637876383]

def onedigit(n):
    while n > 9:
        n = sum(int(x) for x in str(n))
    return n

print(onedigit(sum(nums)))
print(onedigit(sum(onedigit(x) for x in nums)))