qq_38436167 2019-10-24 20:53 采纳率: 0%
浏览 361
已结题

Py小白求挑错,单位转换器

def welcome():
        print('欢迎来到单位转换器!'.center(40,'-'))
        print('请参照以下样例进行输入:温度转换:45C, 5F, 长度转换:4foot, 1m,  货币转换:1RMB, 1D')


class Temperature:
    """温度转换"""

    def __init__(self, start):
        self.start = start

    def c_to_f(self):
        "摄氏度转华氏度"
        t = self.start.strip('C')
        t1 = ( 9 / 5 ) * t + 32
        print(f'华氏温度为{t1}F')

    def f_to_c(self):
        "华氏度转摄氏度"
        t = self.start.strip('F')
        t2 = ( 5 / 9 ) * t - 32
        print(f'摄氏温度为{t2}C')


class Length:
    """长度转换"""

    def __init__(self, start):
        self.start = start

    def m_to_ft(self):
        "米转英尺"
        l = self.start.strip('m')
        l1 = l * 3.2808399
        print(f'长度为{l1}feet')

    def ft_to_m(self):
        "英尺转米"
        l = self.start.strip('m')
        l2 = l * 0.3048
        print(f'长度为{l2}meters')


class Currency:
    """货币转换"""

    def __init__(self, start):
        self.start = start

    def r_to_d(self):
        "人民币转美金"
        c = self.start.strip('RMB')
        c1 = c * 0.1404
        print(f'共{c1}dollors')

    def d_to_r(self):
        "美金转人民币"
        c = self.start.strip('D')
        c2 = c * 7.1218
        print(f'共{c2}rmb')


class Transfer:
    """单位转换的输入输出"""

    def __init__(self, start):
        self.start = start

    def transfer(self):
        """各种转换"""
        try:
            if self.start.strip().endswith('C') and self.start[:-1].isdigit():
                return Temperature(self.start).c_to_f
            elif self.start.strip().endswith('F') and self.start[:-1].isdigit():
                return Temperature(self.start).f_to_c
            elif self.start.strip().endswith('M') and self.start[:-1].isdigit():
                return Length(self.start).m_to_ft
            elif self.start.strip().endswith('foot') and self.start[:-1].isdigit():
                return Length(self.start).ft_to_m
            elif self.start.strip().endswith('RMB') and self.start[:-1].isdigit():
                return Currency(self.start).r_to_d
            elif self.start.strip().endswith('D') and self.start[:-1].isdigit():
                return Currency(self.start).d_to_r
            elif self.start.strip() == 'q':
                return 'q'
        except Exception as e:
            print('输入格式错误,请重新输入', e)


def main():
    welcome()

    state = input('请按照要求输入:')
    while True:
        if Transfer(state).transfer() == 'q':
            print('退出单位转换器')
            break
        else:
            Transfer(state).transfer()


if __name__ == "__main__":
    pass

我想写一个单位转化器,有输入,为什么这个程序跑不出来

  • 写回答

1条回答 默认 最新

  • 机灵鹤 Python领域新星创作者 2019-10-24 21:55
    关注

    我看了一下,主要存在有几个问题

    1 . 在主函数中调用 main()

    if __name__ == "__main__":
        main()
        pass
    

    2 . input 应该放在 while 循环里面,并且最好去掉 else 后面的部分。因为 Transfer(state).transfer() 在 if 语句中已经调用过一次了,不需要 else 中再调用一次了。

        while True:
            state = input('请按照要求输入:')
            if Transfer(state).transfer() == 'q':
                print('退出单位转换器')
                break
    

    3 . 'return Temperature(self.start).c_to_f()' 里面的 c_to_f 是函数,调用时应该加括号

    if self.start.strip().endswith('C') and self.start[:-1].isdigit():
                    return Temperature(self.start).c_to_f()
    

    4 . 在 c_to_f 函数中,变量 t 的类型是字符串,字符串无法和数字进行运算,需要先转换一下,转成 float 型,再运算。

        def c_to_f(self):
            "摄氏度转华氏度"
            t = float(self.start.strip('C'))
            t1 = ( 9 / 5 ) * t + 32
            print(f'华氏温度为{t1}F')
    

    基本就是这些,改完之后,应该就可以正常出结果了

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题