2017-03-04 18 views
2

對不起,如果我提出重複問題,但沒有發現任何問題。如果問題可以以不同的方式提出,請隨時提出建議或編輯。Python。是否有可能從變量值不斷增加的循環中構建一個單線程?

目標是將任何基於n的整數轉換爲十進制整數。

from string import digits, ascii_uppercase 


def convert_n_to_10(number, n): 
    alphabet = digits + ascii_uppercase 
    result_10 = 0 
    for i in range(len(str(number))): 
     result_10 = result_10 * n + alphabet.index(str(number)[i]) 
    return result_10 

問題是關於在這個循環中做result_10變量的值不斷增加的可能性。

for i in range(len(str(number))): 
    result_10 = result_10 * n + alphabet.index(str(number)[i]) 

謝謝。

+0

這裏是'x'定義?爲什麼'數字'是一個未被使用的論點? – ODiogoSilva

+2

爲什麼不使用'int'函數代替'convert_n_to_10'?它已經做了你想做的事情。 –

+0

@JosephSible:不,** int **假定這些字符已經在基數10中。期望的例程也將基數作爲參數。考慮將「21101」從三進制轉換爲十進制。 – Prune

回答

2

這是直着把你的

result_10 = 0 
    for i in range(len(str(number))): 
     result_10 = result_10 * n + alphabet.index(str(number)[i]) 
    return result_10 

成這樣:

return reduce(lambda result_10, i: result_10 * n + alphabet.index(str(number)[i]), 
        range(len(str(number))), 
        0) 

請注意,我只是複製&粘貼主要部分(計算表達式,可迭代和初始值)甚至不讀它們。

(在Python 3,您需要從functools模塊導入reduce。)

+0

計算是100%正確的,謝謝你的通知。由於問題是關於使用先前計算結果的動態變量更改,所以您的答案是我需要的答案。謝謝。 – pyramidka

2
return sum([pow(n, len(x)-i) * alphabet.index(x[i]) 
      for i in range(len(x))]) 

計算的ñ在數每個位置的合適的電源(其如已經字符串;無需轉換),並乘以數字值。

更妙的是,因爲JosephSible提醒我們:

return int(x, n) 
+0

看來我們應該用'n'來劃分'sum'來得到正確的答案。 – pyramidka

+0

'return int(x,n)'完美無缺。正如JosephSible所寫的。 – pyramidka

相關問題