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

2024-09-28 21:18:19 发布

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

我正在为我看的一个视频做一个数学检查,基本上,你把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'

Tags: inforif数字listintsumdigit
1条回答
网友
1楼 · 发布于 2024-09-28 21:18:19

这里的主要问题(除了可怕的复制/粘贴之外)是if x > 9测试不在循环中。你知道吗

因此,如果某个数字高于9,则可以减小其值,但不能确保它仍然高于9(这说明它适用于小值)。你知道吗

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

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)))

两个结果我都得6分。退房!你知道吗

相关问题 更多 >