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