Python数据验证问题:原色输入校验程序错误排查
你的代码存在的问题及修正建议
1. 冗余的变量定义
你把三个原色分别拆成单独变量primary_colour1、primary_colour2、primary_colour3,这种方式既不简洁,也不方便后续做输入验证。建议用集合或列表统一存储原色,比如primary_colours = {'red', 'blue', 'yellow'},后续检查输入是否为原色时用in关键字就能快速判断。
2. 完全无效的try-except块
当前try块里的代码有两个致命问题:
- 逻辑错误:
colour1 = primary_colour1 or primary_colour2 or primary_colour3这行代码里,or会返回第一个“真值”字符串,所以colour1会被直接赋值为'red',完全覆盖用户输入,等于白让用户输入了。 - 不会触发异常:这行是普通的字符串赋值,永远不会抛出
ValueError,所以except块的错误提示永远不会执行。再加上你直接在try块里写了break,不管用户输入啥,循环都会直接终止,根本没起到验证作用。
3. 缺失核心的输入验证逻辑
你的代码完全没检查用户输入的colour1和colour2是不是原色,跳过了最关键的验证步骤,直接就进入后续的颜色混合判断了。
4. 条件判断逻辑彻底错误
比如colour1 and colour2 == primary_colour1 and primary_colour2这个表达式,Python的运算顺序会让它变成colour1 and (colour2 == primary_colour1) and primary_colour2,这根本不是在判断“colour1和colour2分别是red和blue”。而且混合两种原色不分顺序(比如red+blue和blue+red结果都是紫色),你当前的判断只覆盖了一种顺序,会漏掉另一种情况。
5. 循环结构逻辑错误
现在的while循环里,用户输入两个颜色后直接执行try块里的break,导致循环只运行一次,就算输入错误也不会重新要求输入,完全达不到“输入错误就重新输入”的需求。
修正后的代码示例
primary_colours = {'red', 'blue', 'yellow'} while True: # 获取输入并转小写,兼容大小写输入 colour1 = input("Please enter a primary colour: ").strip().lower() colour2 = input("Please enter a primary colour: ").strip().lower() # 验证两个输入都是原色 if colour1 not in primary_colours or colour2 not in primary_colours: print("Please enter a primary colour only (red, blue, yellow)") print() continue # 用集合判断颜色组合,自动覆盖两种输入顺序 if {colour1, colour2} == {'red', 'blue'}: print("Mixing those colours gives purple") elif {colour1, colour2} == {'blue', 'yellow'}: print("Mixing these colours will give you green") elif {colour1, colour2} == {'red', 'yellow'}: print("Mixing those colours will give you orange") else: # 处理输入相同原色的情况 print("Mixing the same primary colour won't produce a new colour") break
内容的提问来源于stack exchange,提问作者Kotor2
相关产品推荐
相关产品推荐

