Python编程题:二、八、十、十六进制转换

问题描述:

编写函数,完成进制转换。要求:

函数输入:原始进制,原始进制表示的数,转换进制

函数输出:转换后的数。

例如:在输入2,101,10,输出为5。即将二进制数101转换成10进制的数

'''
针对于该问题,首先明确进制转换如何进行。
1. 任意进制转换成十进制:使用多项式求和
2. 十进制转换成任意进制:整数部分转换,使用求余运算
基于模块儿化思想,我们的程序也需要完成两块:
1. 函数Any_to_Dec(),完成任意进制转十进制
2. 函数Dec_to_Any(),完成十进制转所需进制

知识点:
函数定义、分支结构、循环结构、算术运算、关系运算、字符串的切片访问
''' 

#该函数用来完成第一步,任意进制转换成十进制   
def Any_to_Dec(I_base,I_num):
    #1.为变量dec初始化赋值
    dec=0
    #2.通过循环,判断输入的每个字符值。对于16进制,可将结果单独列出
    for i in range(len(I_num)):
        if I_num[i]=='A':
            dec=dec+10*I_base**(len(I_num)-1-i)
        elif I_num[i]=='B':
            dec=dec+11*I_base**(len(I_num)-1-i) 
        elif I_num[i]=='C':
            dec=dec+12*I_base**(len(I_num)-1-i)
        elif I_num[i]=='C':
            dec=dec+13*I_base**(len(I_num)-1-i)
        elif I_num[i]=='E':
            dec=dec+14*I_base**(len(I_num)-1-i)
        elif I_num[i]=='F':
            dec=dec+15*I_base**(len(I_num)-1-i)
        else:
            dec=dec+int(I_num[i])*I_base**(len(I_num)-1-i)
    #3.返回转化后的十进制
    return dec

#该函数用来完成第二步,十进制转换成任意进制
def Dec_to_Any(O_base,dec):
    final=''
    while dec!=0:
        #1.求商
        quotient=dec//O_base
        #2.求余数
        remainder=dec%O_base
        dec=quotient
        #3.判定余数对应的符号
        if remainder==10:
            remainder='A'
        elif remainder==11:
            remainder='B'
        elif remainder==12:
            remainder='C'
        elif remainder==13:
            remainder='D'
        elif remainder==14:
            remainder='E'
        elif remainder==15:
            remainder='F'
        else:
            remainder=str(remainder)
        #4.加入字符串    
        final=final+remainder
        #5.反向输出字符串
        final=final[::-1]
    return final

def Transfer(I_base,I_num,O_base):
    #1. 任意进制转换成十进制:使用多项式求和
    dec=Any_to_Dec(I_base,I_num)    
    #2. 十进制转换成任意进制:整数部分转换,使用求余运算
    final=Dec_to_Any(O_base,dec)
    return final
    

#输入输出测试
I_base=int(input("请输入原进制:"))
I_num=input("请输入原数字:")
O_base=int(input("请要转换的进制:"))
n=Transfer(I_base,I_num,O_base)
print("转换的数字为:"+n)


可以直接通过Python内部函数求解,该方式没有体现进制转换的计算过程,不合适

def Transfer(I_base,I_num,O_base):
    #1. 任意进制转换成十进制:使用多项式求和
    dec=int(I_num,int(I_base))
    #2. 十进制转换成任意进制:整数部分转换,使用求余运算
    if O_base==2:
        return bin(dec)
    elif O_base==8:
        return oct(dec)
    elif O_base==16:
        return hex(dec)
    elif O_base==10:
        return str(dec)
    else:
        return(print("输入错误"))

I_base=int(input("请输入原进制:"))
I_num=input("请输入原数字:")
O_base=int(input("请要转换的进制:"))
n=Transfer(I_base,I_num,O_base)
print("转换的数字为:"+n)

猜你喜欢

转载自blog.csdn.net/Liverpool_05/article/details/83274714