某种文明使用五进制表示数据……(python进制转换含小数)

在这里插入图片描述
里面进制转换函数稍加修改就可以是任意进制了,加油兄弟们

#数据字典
data = "@#¥%&"
dict = {
    "@" : "0",
    "#" : "1",
    "¥" : "2",
    "%" : "3",
    "&" : "4",
    "0" : "@",
    "1" : "#",
    "2" : "¥",
    "3" : "%",
    "4" : "&",
    "." : "."
}

#数据输入函数
def inPut():
    while True:
        x = input("输入第一个数字:")
        count = 0
        for i in x:
            if i not in data:
                print("输入字符错误,里面包含"+data+"之外的符号!")
                break
            count += 1
        if len(x) == count:
            break
    while True:
        y = input("输入第二个数字:")
        count = 0
        for i in y:
            if i not in data:
                print("输入字符错误,里面包含"+data+"之外的符号!")
                break
            count += 1
        if len(y) == count:
            break
    return x,y
#10进制转换5进制
def f_5(n):
    int_b,float_b = "",""
    int_n = eval(str(n).partition(".")[0])
    float_n = 0
    if str(n).partition(".")[2] != "":
        float_n = eval("0."+str(n).partition(".")[2])
    while True:
        s=int_n//5  # 商
        y=int_n%5  # 余数
        int_b += str(y)
        if s==0:
            break
        int_n=s
    if str(n).partition(".")[2] != "":
        for i in range(5):
            s = float_n*5
            if(s!=0):
                float_b+=str(s).partition(".")[0]
            else:
                break
            float_n = eval("0."+str(s).partition(".")[2])
    return int_b[::-1]+"."+float_b


#5进制转换10进制
def f_10(x):
    s_x= ""
    n = 0
    for i in range(len(x)):
        s_x += dict[x[i]]
    if s_x.partition(".")[2] != "":
        numx = int(s_x.partition(".")[0],5)
        s = s_x.partition(".")[2]
        for i in range(len(s)):
            n += eval(s[i])*(5**(-(i+1)))
    else:
        numx = eval(str(int(s_x.partition(".")[0],5)))
#     print(numx+n)
    return numx+n
      
#加法运算  
def add(x,y,numx,numy):
    an = ""
    bn =  f_5(numx+numy)
    for i in bn:
        an += dict[i]
    print("两数之和为:{} + {} = {}".format(x,y,an)) 

    
#除法运算
def div(x,y,numx,numy):
    an = ""
    bn =  f_5(numx/numy)
#     print(numx/numy)
#     print(bn)
    for i in bn:
        an += dict[i]
    print("两数之除为:{} / {} = {}".format(x,y,an)) 
        
if __name__=="__main__":
    while True:
        # 输入的两个数据
        print("              |—————————欢迎进入加法和除法的世界—————————|\n\
              |——               1.加法运算             ——|\n\
              |——               2.除法运算             ——|\n\
              |——               3.同时计算             ——|\n\
              |——               0.退出系统             ——|\n\
              |——————————————————————————————————————————|\n\
             ")
        n = input("请输入选项:")
        if n=="1":
            x,y = inPut()
            numx,numy = f_10(x),f_10(y)
            add(x,y,numx,numy)
        elif n=="2":
            x,y = inPut()
            numx,numy = f_10(x),f_10(y)
            div(x,y,numx,numy)
        elif n=="3":
            x,y = inPut()
            numx,numy = f_10(x),f_10(y)
            add(x,y,numx,numy)
            div(x,y,numx,numy)
        elif n=="0":
            print("              |—————————欢迎下次再来—————————————————————|\n")
            break
        else:
            print("输入错误!")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mxmevol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值