好的,这是我的代码,它是一个基本计算器,可以毫无问题地将base转换为base,但是一旦答案超过9,我希望将数字表示为一个字母,就像在base 16,10中一样代表'a',所以我坚持不知道如何使用Ascii表来做到这一点。现在代码运行良好,如果我键入1011,base2,我想转换为基数16.所以输出结果是11,这是正确的,但我希望它是'b'
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 :(得分: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
以为更高的基数提供更多符号。
使用列表创建输出可以避免执行重复的字符串连接,这种连接效率不高。