Python入门练习:如何正确实现重复输入整数并计算最大最小值?
Python入门练习:如何正确实现重复输入整数并计算最大最小值?
Hi Alistair,很高兴你能主动思考更优解,你的思路方向是对的,但确实有更通用、更符合题目设计意图的方法,不用依赖硬编码删除某个位置的元素~
先说说你现有代码里的几个小问题:
- 你把所有输入(包括无效的字符串)都加入了列表,之后手动
pop(2)是硬编码位置——如果无效输入出现在其他位置(比如第一个就输了"bob"),这个方法直接就失效了,完全不通用。 - 另外注意:不要用
list作为变量名,这会覆盖Python内置的list类型,容易引发奇怪的隐性问题,建议换成num_list这类有意义的名字。 - 你在
try块里把输入转成了float(num),但最后又把列表元素转成int,其实可以统一处理(比如都转成int,如果题目要求整数的话,或者保留float看需求)。
更合理的解法:只保留有效输入
核心思路是只把验证成功的数字加入有效列表,无效输入直接跳过(只打印提示,不加入列表),这样循环结束后,有效列表里全是合法的数字,直接计算最大最小值即可,完全不用事后清理无效项。
修正后的代码如下:
# 用有意义的变量名,避免覆盖内置类型 valid_numbers = [] while True: num_input = input("Enter a number: ") if num_input == "done": break try: # 如果题目要求整数就转int,允许小数的话可以用float num = int(num_input) # 只有验证成功的数字,才加入有效列表 valid_numbers.append(num) except ValueError: # 精准捕获「无法转成数字」的异常,避免捕获其他意外错误 print("Invalid input") # 加入空列表判断,防止用户直接输入"done"导致报错 if valid_numbers: largest = max(valid_numbers) smallest = min(valid_numbers) print("Maximum", largest) print("Minimum", smallest) else: print("No valid numbers were entered.")
进阶版:不用列表,实时跟踪最大最小值
如果不想维护一个列表,也可以在循环里直接更新最大最小值,每次得到有效数字就对比更新,适合处理大量输入的场景(虽然这个题目里差异不大,但也是一种更轻量化的思路):
largest = None smallest = None while True: num_input = input("Enter a number: ") if num_input == "done": break try: num = int(num_input) # 初始化或更新最大值 if largest is None or num > largest: largest = num # 初始化或更新最小值 if smallest is None or num < smallest: smallest = num except ValueError: print("Invalid input") if largest is not None and smallest is not None: print("Maximum", largest) print("Minimum", smallest) else: print("No valid numbers were entered.")
这两种方法都比硬编码pop要更合理,也完全贴合题目考察try-except异常处理的初衷~
备注:内容来源于stack exchange,提问作者Alistair Prosser
相关产品推荐
相关产品推荐

