“if”语句中的大小写不敏感(Python)

Case insensitivity in “if” statement (Python)

本问题已经有最佳答案,请猛点这里访问。

我正在做一个项目,在这个项目中,有一点会问用户一个是/否的问题。我目前使用此代码处理此类问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def yn():
    global finalchoice
    choice=str(raw_input("Y/N:"))
    if choice =="Y":
        finalchoice="true"
    elif choice =="y":
        finalchoice="true"
    elif choice =="N":
        finalchoice="false"
    elif choice =="n":
        finalchoice="false"
    else:
        yn()
    pass

但这似乎效率很低,特别是我必须分别检查"y"和"y"或"n"和"n"。我试过了:

1
2
if choice =="Y" or"y":
    finalchoice="true"

不幸的是,所有这些操作都忽略了"else"命令,并将传递我给它的任何内容。

有什么小窍门吗?


if choice =="Y" or"y":不对!它将始终对True进行评估。

它本质上是(choice =="Y")("y")。后者是True,因为python中的任何非空字符串在逻辑上都计算为布尔值true。

你应该这样做:

1
if choice in ["Y","y"]:

或者,

1
if choice =="Y" or choice =="y":

或者你可以使用:

1
2
if choice.lower() =="y":
    finalchoice="true"

要添加到@sudipta的答案中,一种方法是删除该案例并只取第一个字母:

1
2
if choice.lower().startswith("y"):
    finalchoice="true"