Python迭代处理整浮点数值求最值 遍历字符致结果异常求解
问题根因
代码存在两处核心逻辑错误:
- 你已经在
try块中将输入字符串转换为了完整浮点数fnum,但后续比较环节完全没有使用这个合法数值,反而遍历原始输入字符串num的单个字符,拿'5'、'6'这类单数字字符做大小对比,本质是对比字符的ASCII值,并非对比完整数值,因此才会出现输入56、77、17时,错误返回单字符最大值'7'、最小值'1'的问题。 - 未存储所有有效输入的数值,无法满足“输出所有输入数值”的需求。
修正后代码
直接替换原有逻辑即可,修复点包含:新增列表存储所有有效数值、移除遍历字符串的错误比较逻辑、直接用转换完成的浮点数做最值对比:
largest = None smallest = None valid_nums = [] while True: num = input("Enter a number: ") if num == "done": break try: fnum = float(num) except: print("Invalid input") continue valid_nums.append(fnum) print(num) # 直接对比完整数值更新最值 if smallest is None or fnum < smallest: smallest = fnum if largest is None or fnum > largest: largest = fnum print("所有输入的有效数值:", valid_nums) print("Maximum is", largest) print("Minimum is", smallest)
效果验证
依次输入56、77、17、abc、done时,程序会先对非数字输入abc返回错误提示,结束输入后正确输出有效数值列表[56.0, 77.0, 17.0],返回最大值77、最小值17,符合预期。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

