2015-10-30 33 views
0

因此,該函數將值減小爲單個數字的方式是在一個循環中連續添加一個值的數字,直到其值爲9或更小。問題進來時相加的兩個數位等同於10,其然後應進一步減少爲1將數字減少爲單個數字的Python函數

def rts(value): 
    VALUE_STR = str(value) 
    ANSWER = "0" 
    while value > 9: 
     value = int("0") 
     for ch in VALUE_STR: 
     ch = int(ch) 
     value += ch 
     ANSWER = str(value) 
    return ANSWER 

值我不能真正顯示輸出加1 + 0次說,但是當我它打印出來,將陷入無限循環隨時它傳遞一個數字值,該值添加時等於10

實施例1:
9 + 1 = 10
開始無端環

實施例2:
6 + 4 = 10
開始無端環

它與其它數字

實施例1所述的方式:
9 + 7 = 16
6 + 1 = 7
ANSWER = 7

實施例2:
4 + 5 = 9
ANSWER = 9

這裏是爲需要類似功能的人提供固定代碼。

def rts(value): 
    VALUE_STR = str(value) 
    ANSWER = "0" 
    while value > 9: 
     value = int("0") 
     for ch in VALUE_STR: 
     ch = int(ch) 
     value += ch 
     ANSWER = str(value) 
     VALUE_STR = str(value) 

    return ANSWER 
+1

你不更新'環路(注意變量應該是'lowercase_with_underscores'),所以任何輸入,需要一個以上的一次通過循環將卡住內VALUE_STR' - 在使用例如看看http://www.pythontutor.com/visualize.html#mode=edit – jonrsharpe

+0

你爲什麼要用絃樂來做這件事?甚至沒有解決效率問題,這只是數學上的嘗試 - 而且代碼會更清晰。什麼是'x/10'?什麼是'x%10'?在這種情況下,你會面臨>添加和測試9個結果? – zxq9

+0

我這樣做將任何數字刪除到一個整數除以10將不會是一個整數。此外,爲了稍後在程序中使用的數字,簡單並不完全是目標。我不明白你的最後一個問題「你將面臨什麼情況?」添加和測試9個結果?「。如果你問我的方法什麼時候可以> 9,我給出了這個例子。至於你的方法,就像117/10 = 11.3一樣簡單,因此將需要再次除以10,這將被1.17舍入爲1.我的方法將在1 + 1 + 7 = 9的迭代中完成。 – leigon

回答

2

在行

for ch in VALUE_STR: 

您在循環的每次運行反饋的原始字符串。所以,任何需要多次迭代的執行都會造成無限循環。

+0

這就是究竟是什麼問題是我所要做的就是在'VALUE_STR = str(value)'行之後加上'VALUE_STR = str(value)'...感謝你的支持。哇,我覺得啞巴哈哈。 – leigon

2

此功能以不同的方式執行相同操作。它遍歷數字中的數字並對它們進行求和。然後檢查結果是否是單位數字。如果不是,它遞歸地調用它自己。

def rts(input_number): 
    input_number = str(input_number) 
    value = 0 

    for x in input_number: 
     value += int(x) 

    if (value > 9): 
     return rts(value) 
    else: 
     return value 
+0

那麼你有什麼改變,並*爲什麼*?另外請注意,您不遵守風格指南。 – jonrsharpe

+0

@jonrsharpe我用相同的目標寫了一個不同的函數。它將所有數字與遞歸相加,直到只剩下一個數字。風格指南有什麼問題?也許你可以建議編輯,我會接受它。 – cuddlecheek

+1

請參閱[PEP-8](http://www.python.org/dev/peps/pep-0008/) - 不鼓勵使用複合語句。說出你的答案爲何以及如何解決OP的問題也很有幫助。 – jonrsharpe