2017-03-27 65 views
-2

OK,所以這是我的代碼,這是一個基礎的計算器,將基地沒有問題的鹼轉化,但一旦答案是超過9,我要的數量來表示字母,只是像基數16中一樣,10代表'a',所以我被困在如何使用Ascii表格。現在的代碼運行良好,如果我鍵入1011,BASE2,我要轉換爲基16所以輸出結果是11,這是正確的,但我希望它是「B」Python的整數需要

number = input("what's your number: ") 
o_base = int(input("what is your oringal base: ")) 
base = int(input("what's the base you want to convert: ")) 
answer = "" 
total = 0 

for i, d in enumerate(reversed(number)): 
    total = total + int(d) * o_base ** i 

while (total != 0): 
    answer += str(total % base) 
    total //= base 

print (answer) 
+0

我敢打賭沒有一個叫'answer'在INT關鍵字參數()。你想要做什麼? – abccd

+0

你想做什麼?這應該按照它的寫法給出一個SyntaxError。我猜你想回答= INT(CHR(I)) –

+0

'i'你的情況實際上是一個'str'類型,所以你是你所說的得到「類型錯誤:一個整數需要(有型STR)」 。但是,如果'i'是一個整數,它會引發''TypeError''作爲'int'函數的一個無效的鍵參數。所以,你準備做什麼?請提供一個更好的[MCVE]。 – idjaw

回答

0

Python可以首先使用int(number, base)將您的號碼轉換爲Python整數。接下來你需要做的就是將它轉換成你的目標基礎。這通常使用divmod()來完成,它結合了兩個數字的分割並將其餘數合併爲一個函數。

要將每個數字轉換爲正確的數字或​​字母,最簡單的方法是創建一個字符串,將所有必需的符號按順序排列,然後使用索引來爲您提供所需的符號。 digits[0]這裏將返回0,並且digits[10]將返回A

import string 

number = input("What's your number: ") 
o_base = int(input("What is your original base: ")) 
base = int(input("What is the base you want to convert to: ")) 

number = int(number, o_base)  
digits = string.digits + string.ascii_uppercase # 0 to 9 + A to Z 
output = [] 

while number: 
    number, remainder = divmod(number, base) 
    output.insert(0, digits[remainder]) 

print(''.join(output)) 

此示例適用到基底36(即,0到9和A至Z)。您顯然可以擴展digits,爲更高的基數提供更多符號。

使用列表創建輸出避免做重複的字符串連接這是不是很有效。