python进制转换尝试

"""
进行n进制到n进制的进制转换
"""
dict1 = {10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "E", 16: "F"}
dict2 = dict()
for key, value in dict1.items():
    dict2[value] = str(key)  # 键值交换,并全换成字符串类型


def changer_n_to_n(num, origin, target=10):
    lst_num0 = list(str(num))  # 把字符串打成列表,方便修改
    for i in range(len(lst_num0)):
        if lst_num0[i] in dict1.values():
            lst_num0[i] = dict2.get(lst_num0[i])
            # 把字母换掉,全都是数字才能进一步运算
    dec_int = 0
    for i in range(len(lst_num0)):
        dec_int += int(lst_num0[i]) * (int(origin) ** (len(lst_num0) - i - 1))
        # 这里是,对一个不确定是不是十进制的数字,每一位乘以 进制的索引次方,加和得到十进制结果

    divisor = dec_int  # 整除
    result = list()  # 用于存储结果
    while divisor != 0:
        reminder = divisor % target  # 取余计数
        if 10 <= reminder <= 16:
            reminder = dict1[reminder]
        result.append(str(reminder))
        divisor = divisor // target  # 整除用于下一次计算
    result.reverse()
    return result
# 其实就是把上两个工程文件里的函数叠一块……先统一到10进制dec,然后再往下走


def printer_all(num, origin):  # 用来打印出所有2-16进制转换结果
    for target in range(2, 17):
        if target <= 9:  # 这个纯粹是为了看着好看一点,后面数字是每一位对齐的
            print(" ", end="")
        print(f"    {target}进制 结果为:{' '.join(changer_n_to_n(num, origin, target))}")


num0_str = input("\n请输入想要进行进制转换的原数字(非负整数,10-15的数字用大写英文字母A-F表示):")
origin_str = input("数字在转换前是几进制?(阿拉伯数字,当前仅支持2-16进制。若为10进制可不填)",)
# 这两个因为都有可能是空字符串,所以先不要套int,int("")会报错的
if origin_str == "":
    origin_str = "10"  # 如果用户没有输入,自动补上"10"
target_str = input("您希望转换到几进制?(范围同上,如果想要查看2-16所有进制转换结果可不填)")
if target_str != "":  # 只要求转换到一种进制
    target_int = int(target_str)
    print(f"\n{origin_str}进制转换到到{target_int}进制 转换结果为:\
    {' '.join(changer_n_to_n(num0_str, origin_str, target_int))}")
else:
    print(f"\n{origin_str}进制转换到")
    printer_all(num0_str, origin_str)  # 把所有结果都打印出来

尝试写了2-16进制内相互转换的代码
但是是先把n转到10再转到目标n,可能效率不够高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值