实验 1 温度转换与输入输出强化

实验任务:

        1. 实现摄氏温度与华氏温度互转(保留两位小数)

        2. 扩展功能:输入错误处理(如非数字输入提示重新输入)

        3. 扩展:支持开尔文温度的三向转换

实验代码如下:

def temperature_converter():
    # 温度类型映射字典
    type_map = {
        1: ("摄氏", "C"),
        2: ("华氏", "F"),
        3: ("开尔文", "K")
    }

    # 输入校验函数
    def get_input(prompt, validator):
        while True:
            try:
                value = input(prompt)
                return validator(value)
            except ValueError as e:
                print(f"输入错误:{e},请重新输入")

    # 主程序循环
    while True:
        print("\n" + "="*30)
        print("温度转换器(支持摄氏/C、华氏/F、开尔文/K)")
        print("="*30)
        
        # 获取温度类型输入
        from_type = get_input(
            "请输入原始温度类型 (1-摄氏/C, 2-华氏/F, 3-开尔文/K):",
            lambda x: type_map[int(x)][0] if x in ['1','2','3'] else (_ for _ in ()).throw(ValueError("请输入1-3"))
        )

        to_type = get_input(
            "请输入目标温度类型 (1-摄氏/C, 2-华氏/F, 3-开尔文/K):",
            lambda x: type_map[int(x)][0] if x in ['1','2','3'] else (_ for _ in ()).throw(ValueError("请输入1-3"))
        )

        # 获取温度值输入
        temp = get_input(
            "请输入温度值:",
            lambda x: float(x)
        )

        # 温度转换逻辑
        try:
            # 先统一转成摄氏温度
            if from_type == "华氏":
                celsius = (temp - 32) * 5/9
            elif from_type == "开尔文":
                celsius = temp - 273.15
            else:
                celsius = temp

            # 从摄氏转目标类型
            if to_type == "华氏":
                result = celsius * 9/5 + 32
            elif to_type == "开尔文":
                result = celsius + 273.15
            else:
                result = celsius

            # 输出结果(自动处理负数情况)
            print(f"\n转换结果:{temp:.2f}{type_map[[k for k,v in type_map.items() if v[0]==from_type][0]][1]} → "
                  f"{result:.2f}{type_map[[k for k,v in type_map.items() if v[0]==to_type][0]][1]}")

        except Exception as e:
            print(f"转换错误:{str(e)}")

        # 继续查询
        if input("\n是否继续转换?(y/n):").lower() != 'y':
            print("感谢使用温度转换器!")
            break

if __name__ == "__main__":
    temperature_converter()

实验测试结果如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值