Python-一个整数是必需的

时间:2017-03-27 02:02:38

标签: python

好的,这是我的代码,它是一个基本计算器,可以毫无问题地将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)

1 个答案:

答案 0 :(得分:0)

Python可以先使用int(number, base)将您的号码转换为Python整数。接下来,您需要做的就是将其转换为目标库。这通常使用divmod()来完成,它结合了两个数字的除法并将其余数字合并为一个函数。

要将每个数字转换为正确的数字或​​字母,最简单的方法是创建一个按顺序保存所有必需符号的字符串,然后使用索引为您提供所需的符号,例如: digits[0]此处将返回0digits[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以为更高的基数提供更多符号。

使用列表创建输出可以避免执行重复的字符串连接,这种连接效率不高。