You need to enable JavaScript to run this app. Python实现菜单1-3输入校验时while循环未触发错误提示
优惠活动
大模型
产品
解决方案
定价
更多

Python实现菜单1-3输入校验时while循环未触发错误提示

错误提示不触发的核心原因

按影响优先级从高到低排序:

  • 判断代码的缩进位置完全错误
    你编写的if choice != 1 and 2 and 3: 整段代码处于while True循环的外部层级,根本不会被纳入循环的执行流程。当前循环的实际执行逻辑是:打印交互菜单→获取用户输入→依次匹配1、2、3对应的功能分支,如果输入值为3就直接跳出循环,其他任何输入都会直接走完当前轮次,回到循环开头重新展示菜单。整个流程完全不会触及循环块外的错误判断代码,“Please Try Again”自然永远没有机会输出。
  • 条件判断的写法存在语法逻辑误解
    哪怕把这段错误判断挪到循环内部,choice != 1 and 2 and 3 也完全不符合你预期的“输入不是1、2、3任意值时触发错误”的校验逻辑。按照Python的求值规则,整段表达式会被拆解为(choice != 1) and bool(2) and bool(3),由于非零整数在布尔判断中永远为真,后面两个and 2、and 3的判断没有任何实际作用,整个表达式实际只校验“choice是否不等于1”,和预期的三值校验逻辑完全脱节。正确的校验写法可以简化为choice not in (1,2,3),或者拆分写为choice !=1 and choice !=2 and choice !=3。
  • 输入环节没有做异常兜底
    当前代码直接将input()的返回值强转为整数,如果用户输入字母、符号等非数字内容,代码会直接抛出值错误崩溃,根本走不到后续的校验流程。
  • 分支判断的写法冗余
    原来的三个连续独立if判断虽然在当前场景下因选项值无重叠不会触发多分支执行,但不属于互斥判断结构,会产生不必要的判断开销,建议替换为elif的互斥分支写法。
修正后的核心循环实现
while True:
    print("Press 1 To Add Friend Information")
    print("Press 2 To Add Up To 10 Movies Per Friend")
    print('Press 3 To Select Who Participates And Generate A Random Movie')
    # 兜底处理非数字输入
    try:
        choice = int(input())
    except ValueError:
        print("Please Try Again")
        continue

    # 互斥分支判断
    if choice == 1:
        friend_insert()
    elif choice == 2:
        movie_insert()
    elif choice == 3:
        friend_delete()
        random_movie()
        break
    # 所有不符合1、2、3要求的输入统一输出错误提示
    else:
        print("Please Try Again")

内容的提问来源于stack exchange,提问作者kielp2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 09:06:09