Python函数中使用input遇异常:仅print语句执行,求问题排查
问题分析与修复方案
你的代码只执行了开头的print语句,核心问题和修复点如下:
- 函数未被调用:你定义了
max_num函数,但全局代码里没有触发函数执行的语句,所以print执行后程序直接结束,函数内部逻辑完全没运行。 - 冗余参数无意义:函数定义时写了
num1, num2, num3, false=None,但内部直接用input覆盖了这些参数,完全不需要这些形参,反而会干扰函数调用。 - 字符串直接比较逻辑错误:
input获取的是字符串类型,直接用>=比较的是字符的ASCII码顺序,不是数值大小(比如"10"会比"2"小),必须先转成数值类型再比较。 isdigit用法错误:isdigit()方法不需要传参数,而且你的判断时机和逻辑都错了——应该先检查输入是否为数字,再进行比较,否则错误输入会先触发字符串比较的逻辑,且你写的条件是“三个输入都不是数字”才提示,但实际只要有一个不是就应该报错。- 无效递归语句:
return max_num()放在了所有分支之后,永远不会被执行到,因为前面的if/elif/else已经覆盖了所有情况,要么return要么执行print,程序根本走不到这一行。
修正后的代码
print("I can tell you the maximum of 3 numbers") def max_num(): # 获取输入 num1_input = input("enter first number: ") num2_input = input("enter second number: ") num3_input = input("enter third number: ") # 先检查是否都是数字 if not (num1_input.isdigit() and num2_input.isdigit() and num3_input.isdigit()): print("no number available") return # 转换为整数类型 num1 = int(num1_input) num2 = int(num2_input) num3 = int(num3_input) # 比较数值大小并输出结果 if num1 >= num2 and num1 >= num3: print(f"The maximum number is: {num1}") elif num2 >= num1 and num2 >= num3: print(f"The maximum number is: {num2}") else: print(f"The maximum number is: {num3}") # 调用函数触发执行 max_num()
额外优化(支持浮点数输入)
如果需要处理带小数点的数字(比如3.14),可以用try-except替代isdigit(),避免无法识别浮点数:
print("I can tell you the maximum of 3 numbers") def max_num(): try: # 直接转换为浮点数,同时捕获非数字输入的异常 num1 = float(input("enter first number: ")) num2 = float(input("enter second number: ")) num3 = float(input("enter third number: ")) except ValueError: print("no number available") return # 用Python内置max函数简化比较逻辑 max_val = max(num1, num2, num3) print(f"The maximum number is: {max_val}") max_num()
内容的提问来源于stack exchange,提问作者ali_sheybani
相关产品推荐
相关产品推荐

