Python多数值温标转换程序报ValueError错误,求优化实现方案
错误原因
- 直接触发ValueError的原因:你输入的
80, 90, 100是包含逗号、空格的字符串,int()只能转换纯数字格式的字符串,无法直接处理多值拼接的输入。 - 原有代码还存在其他逻辑问题:
- 温标判断逻辑错误:
if temp_scale == "F" or "f":的写法永远返回真,因为单独的"f"作为非空字符串布尔值为True,不管用户输入什么都会走华氏转摄氏的分支。 - 开头输入的温度数量参数
temp完全没有被调用,你定义的mylist以及转元组的操作也没有实际作用,没有实现「输入指定数量温度值批量转换」的需求。
- 温标判断逻辑错误:
优化实现(for循环批量转换版本)
def convert_temp(temp_scale, source_temp): # 统一转大写判断,简化逻辑 if temp_scale.upper() == "F": return 'C', round((source_temp - 32) * 5.0 / 9.0, 2) elif temp_scale.upper() == "C": return 'F', round((source_temp * (9.0 / 5.0)) + 32, 2) else: # 增加非法温标输入的处理 raise ValueError("温标仅支持输入F或C") if __name__ == "__main__": # 获取要输入的温度数量 temp_count = int(input("你要输入多少个温度值? ")) temp_scale = input("选择输入温标是F(华氏)还是C(摄氏): ") temp_list = [] # 循环获取指定数量的温度值 for i in range(temp_count): source_temp = float(input(f"请输入第{i+1}个温度值: ")) temp_list.append(source_temp) # 批量转换输出 for temp in temp_list: target_scale, converted_temp = convert_temp(temp_scale, temp) print(f"{temp} 度{temp_scale.title()} 转换后为 {converted_temp} 度{target_scale}")
如果你想要一次性输入多个用逗号分隔的温度值,也可以把获取温度的部分改成如下写法:
input_str = input("请输入所有温度值,用英文逗号分隔: ") # 拆分字符串,去除空格后转成数字 temp_list = [float(item.strip()) for item in input_str.split(",")]
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

