Python实现浮点数归一化时ValueError报错的原因及修复
报错产生原因
触发该报错的核心原因是输入读取逻辑和题目给定的输入格式完全不匹配:
- 原代码第一行
num_nums=int(input())的设计逻辑是:先读取一个整数作为待输入数值的总个数,之后再逐行读取每个浮点数。 - 但题目要求的输入格式是直接输入一整行、用空格分隔的所有浮点数,不存在“先输入数值个数”的步骤。因此第一次调用
input()时,直接读取到了完整的输入字符串30.0 50.0 10.0 100.0 65.0,尝试把这个带小数点、空格的非整数字符串强制转换为int类型,就会抛出ValueError: invalid literal for int() with base 10的报错。
代码存在的其他隐藏问题
除了触发报错的输入逻辑问题,原代码还有两处会导致结果不符合要求的bug:
- 变量名引用错误:代码中已经将列表最大值存入变量
maximum,但归一化计算时写的是除以内置函数max,就算输入逻辑改对,运行到这一步也会触发类型错误。 - 输出格式错误:原代码用循环逐次打印每个值,默认每个值单独占一行,不符合题目要求的“每个数值后跟随一个空格、单行输出”的格式。
修改后的可运行代码
# 读取整行输入,按空格拆分后批量转为浮点数存入列表 nums = list(map(float, input().split())) max_value = max(nums) # 逐个计算归一化结果,统一保留两位小数 normalized_nums = [f"{item / max_value:.2f}" for item in nums] # 用空格拼接所有结果后打印,完全匹配输出格式要求 print(' '.join(normalized_nums))
代码测试效果:输入示例的30.0 50.0 10.0 100.0 65.0时,会正确输出0.30 0.50 0.10 1.00 0.65,完全符合任务要求。
内容的提问来源于stack exchange,提问作者DyM
相关产品推荐
相关产品推荐

