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
相关产品推荐
相关产品推荐

