如何基于数据类型校验用户输入,用if/else或try/except校验num1、num2合法性
数字输入校验实现方案
方案1:try/except实现(更推荐)
Python 官方更推荐用异常捕获处理输入转换场景,无需手动判断各种字符串边界情况,逻辑更简洁。核心逻辑为:尝试将输入字符串转为int类型,若转换抛出ValueError则说明输入不是合法数字,直接输出错误提示即可。
修改后的完整代码如下:
print("\n 选择运算类型 \n") print("输入1 执行加法") print("输入2 执行减法") print("输入3 执行乘法") print("输入4 执行除法 \n") while True: user = input("请输入选择(1/2/3/4): ") if user in ('1','2','3','4'): # 捕获非数字输入异常 try: num1 = int(input("输入第一个数字: ")) num2 = int(input("输入第二个数字: ")) except ValueError: print("错误:输入不是合法数字,请重新操作") continue if user == '1': print(f"{num1} + {num2} = {num1 + num2}") print("感谢使用本计算器") elif user == '2': print(f"{num1} - {num2} = {num1 - num2}") print("感谢使用本计算器") elif user == '3': print(f"{num1} * {num2} = {num1 * num2}") print("感谢使用本计算器") elif user == '4': # 可选:额外捕获除法除零异常 try: print(f"{num1} / {num2} = {num1 / num2}") print("感谢使用本计算器") except ZeroDivisionError: print("错误:除数不能为0") else: print("请输入正确的选项") else: print("无效输入")
方案2:if/else实现
如果要求必须用条件判断实现,可以通过字符串方法校验合法性,仅校验正整数直接用str.isdigit()即可,需要支持负数则要额外处理负号的情况。示例校验逻辑如下:
def is_valid_number(s): # 支持负整数校验 if s.startswith('-'): return s[1:].isdigit() return s.isdigit() # 替换原代码中获取num1、num2的部分即可 num1_str = input("输入第一个数字: ") num2_str = input("输入第二个数字: ") if not (is_valid_number(num1_str) and is_valid_number(num2_str)): print("错误:输入不是合法数字,请重新操作") continue num1 = int(num1_str) num2 = int(num2_str)
注意:isdigit()仅能识别整数,若后续需要支持小数输入,该方案需要额外判断小数点的个数和位置,实现复杂度远高于try/except方案。
内容的提问来源于stack exchange,提问作者Ammar Kapasi
相关产品推荐
相关产品推荐

