You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:57:09