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

Python if语句无法正确匹配列表内输入选项的问题求助

问题描述

使用Python开发石头剪刀布小游戏时,if条件语句无法正确匹配预设列表中存储的用户输入选项,暂无法定位问题根源,无法确认是列表格式编写错误还是整体代码逻辑存在问题。

复现代码
def menu():

    print("================================")
    print("Welcome to rock/paper/scissors !")
    print("================================")
    
    time.sleep(1)
    
    print("Choose a play!")
    print("")
    print(" ROCK ")
    print("")
    print(" PAPER ")
    print("")
    print(" SCISSORS ")
    print("")

def main():
    
    answers = ["ROCK","Rock","rock","PAPER","Paper","paper","SCISSORS","Scissors","scissors"]
    
    for i in range(2):
        if i == 1:
            continue
        menu()

    question1 = input("Pick your choice!")
    if question1 == answers[1]:
        print("working")
    else:
        exit()
    
main()
排查思路

按运行顺序逐段校验即可定位所有问题:

  • 先检查依赖导入:代码中调用了time.sleep(),但开头没有导入time模块,运行时会直接抛出NameError,属于基础语法遗漏。
  • 再检查循环逻辑:for i in range(2)的循环中,i等于1时直接执行continue跳过后续逻辑,整个循环实际只会执行1次menu(),属于完全冗余的无效代码。
  • 核心校验匹配逻辑:当前if判断只做了question1 == answers[1]的等值判断,answers[1]对应的值是首字母大写的"Rock",也就是说只有用户严格输入Rock才会进入成功分支,输入列表里存储的其他合法值(比如ROCK、rock、PAPER等)都会直接走exit退出逻辑,这是匹配失效的核心原因。
  • 最后检查输入容错:当前代码没有处理用户输入前后误带空格的场景,即使用户输入的内容是合法选项,只要前后多打了空格就会匹配失败。
修复方案
  • 补上缺失的time模块导入
  • 删除无意义的冗余循环,直接单次调用菜单函数
  • 废弃枚举所有大小写格式的列表写法,改用集合存储统一为小写格式的合法选项,减少冗余存储
  • 对用户输入先做前后空格清除、统一转小写的预处理,再判断是否属于合法选项集合,覆盖所有大小写、带误输入空格的场景
  • 替换硬编码的单值匹配逻辑,改为判断输入是否在合法选项集合内

修复后的可运行代码:

import time

def menu():
    print("================================")
    print("Welcome to rock/paper/scissors !")
    print("================================")
    
    time.sleep(1)
    
    print("Choose a play!")
    print("")
    print(" ROCK ")
    print("")
    print(" PAPER ")
    print("")
    print(" SCISSORS ")
    print("")

def main():
    valid_answers = {"rock", "paper", "scissors"}
    menu()

    question1 = input("Pick your choice!").strip().lower()
    if question1 in valid_answers:
        print("working")
        # 后续可在此处补充电脑出拳、胜负判定等游戏逻辑
    else:
        print("Invalid input, please enter rock, paper or scissors!")
        exit()
    
main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:09:24