You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现摄氏度与华氏度互相转换程序,含输入校验与循环逻辑

摄氏度与华氏度转换Python程序实现

原有代码核心问题

  • isdigit()调用逻辑错误:该方法返回布尔值,直接转换为int只能得到1或0,无法提取输入的实际数值
  • 未覆盖输入1个、2个值的默认规则场景
  • 缺少温度转换核心逻辑、for循环遍历温度序列的实现
  • 缺少无效输入次数、成功转换次数的统计模块
  • 缺少转换完成后的重试判断和最终统计结果输出

完整可运行代码

# 初始化统计计数器
invalid_input_count = 0
success_convert_count = 0

while True:
    # 第一步:选择转换单位
    while True:
        unit = input("请输入要转换的原单位(Celsius 或 Fahrenheit):").strip()
        if unit.lower() in ["celsius", "c"]:
            unit_type = "C"
            break
        elif unit.lower() in ["fahrenheit", "f"]:
            unit_type = "F"
            break
        else:
            invalid_input_count += 1
            print("输入无效,请输入正确的单位")
    
    # 第二步:输入范围参数
    while True:
        range_input = input("请输入用星号分隔的起始值、结束值、步长:").strip()
        # 兼容带空格的输入格式,比如 0 * 100 * 3
        parts = [p.strip() for p in range_input.split("*")]
        # 校验输入为数字格式
        try:
            nums = [int(p) for p in parts]
        except ValueError:
            invalid_input_count += 1
            print("输入错误,请输入数字格式的参数")
            continue
        
        # 处理不同长度的输入规则
        if len(nums) == 1:
            start = 1
            end = nums[0]
            interval = 2
        elif len(nums) == 2:
            start, end = nums
            interval = -2 if start > end else 2
        elif len(nums) == 3:
            start, end, interval = nums
            # 校验步长合法性
            if start < end and interval <= 0:
                invalid_input_count += 1
                print("参数错误:起始值小于结束值时步长必须为正数")
                continue
            if start > end and interval >= 0:
                invalid_input_count += 1
                print("参数错误:起始值大于结束值时步长必须为负数")
                continue
            if start == end:
                invalid_input_count += 1
                print("参数错误:起始值和结束值不能相等")
                continue
        else:
            invalid_input_count += 1
            print("参数数量错误,最多输入3个参数")
            continue
        # 参数校验通过跳出循环
        break
    
    # 第三步:for循环实现温度转换与输出
    print(f"{'摄氏度' if unit_type == 'C' else '华氏度':<10} {'华氏度' if unit_type == 'C' else '摄氏度':<10}")
    print("-"*20)
    # 适配正负步长调整range边界
    adjust = 1 if interval > 0 else -1
    for temp in range(start, end + adjust, interval):
        if unit_type == "C":
            # 摄氏度转华氏度公式
            converted = temp * 9 / 5 + 32
        else:
            # 华氏度转摄氏度公式
            converted = (temp - 32) * 5 / 9
        print(f"{temp:<12} {converted:.2f}")
    
    # 成功转换次数计数
    success_convert_count += 1
    
    # 第四步:询问是否重试
    retry = input("是否要继续转换?(y/n):").strip().lower()
    if retry != "y":
        break

# 输出最终统计结果
print("\nThank you")
print(f"全程序运行期间无效输入总次数:{invalid_input_count}")
print(f"成功完成温度转换的次数:{success_convert_count}")

内容的提问来源于stack exchange,提问作者Yuzuki Yuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:18:01