6 回答

TA貢獻1825條經驗 獲得超6個贊
順便說一句,看起來您的基本轉換實際上不會做您想要的。您應該查看如何將任何基數中的整數轉換為字符串?正確地進行轉換(例如,十六進制中有字母 AF,這些不是由您的代碼處理的)。
要接受名稱而不是數字,您需要更改這行代碼:
base = int(input("Convert to\n Binary[2] - Octal[8] - Hexadecimal[16]: "))
這里發(fā)生了什么事?input()從標準輸入中取出一行。在交互式情況下,這意味著用戶輸入一些東西(希望是一個數字)然后按回車鍵。我們得到那個字符串。然后int將該字符串轉換為數字。
你的convert期望base是一個數字。你想輸入等"binary"以對應base = 2。實現這一目標的一種方法是使用 dict。它可以將字符串映射到數字:
base_name_to_base = {'binary': 2, 'octal': 8, 'hexadecimal': 16}
base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]
請注意,如果不是字典中的鍵,則base_name_to_base[x]可能會失?。╮aise KeyError)x。所以你想處理這個(如果用戶輸入"blah"怎么辦?):
while True:
try:
base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]
break
except KeyError:
pass
這將循環(huán)直到我們遇到中斷(這僅在索引base_name_to_base不會引發(fā)鍵錯誤時發(fā)生。
此外,您可能希望處理不同的情況(例如"BINARY")或任意空格(例如" binary ")。您可以通過調用.lower()和.strip()返回的字符串來做到這一點input()。

TA貢獻1862條經驗 獲得超6個贊
嘗試
def main() :
number = int(input("Enter your number: "))
base = int(input("Convert to\n" \
" Binary[2] - Octal[8] - Hexadecimal[16]: "))
base_string = "None"
if base == 2 :
base_string = "binary"
elif base == 8 :
base_string = "octal"
else:
base_string = "hexadecimal"
print("\n {} in {} is: {}".format(str(number), base_string, str(convert(number, 10, base))))
def convert(fromNum, fromBase, toBase) :
toNum = 0
power = 0
while fromNum > 0 :
toNum += fromBase ** power * (fromNum % toBase)
fromNum //= toBase
power += 1
return toNum
main()
您的問題是 if 語句中的“二進制”部分。它對您的代碼和輸出幾乎沒有影響。您必須將文字表示(“二進制”,...)存儲在某個變量(“base_string”)中。然后你可以在你的輸出中使用這個變量。
添加回答
舉報