问题描述:
编写函数,完成进制转换。要求:
函数输入:原始进制,原始进制表示的数,转换进制
函数输出:转换后的数。
例如:在输入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)