2017-09-14 26 views
-4

我正在爲我觀看的視頻進行數學檢查,基本上,您將Input1,Input2,Input3,Input4添加在一起。如果總和大於9,則將整數加起來並重復並重復,直至得到1-9的單個數字。然後,您輸入Input1並進行數字加法,直到您得到的單個數小於10.您對Input2,Input3和Input4重複此操作。然後你添加這四個數字,並重復這個數字的加法,直到它還有一個小於10的單個數字。檢查是否Input1,2,3,4之和剩下的單個數字應該與總和相同Input1,2,3,4的個位數。數學檢查器中的IF循環有什麼問題?

這適用於小數字,但大數字不適用。結果中我得到不同的數字和數字大於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' 
+7

'if'不是一個循環。 – melpomene

+0

該死的,這麼多的複製/粘貼。我可以用10行編寫你的代碼。至少它會更容易調試。 –

+1

如果你想循環,只要每個條件成立,用'while'替換'if's。 – Blckknght

回答

4

的主要問題在這裏(除了可怕的複製/粘貼的東西)是你的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兩個結果。退房!

+0

如果這對你有效,你可以接受答案 –