【问题标题】:Case insensitivity in "if" statement (Python) [duplicate]“if”语句中的大小写不敏感(Python)[重复]
【发布时间】:2014-06-09 08:08:52
【问题描述】:

我正在开展一个项目,该项目有时会询问用户是/否问题。我目前使用此代码来处理此类问题:

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”。我试过了:

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

不幸的是,所有这一切都是忽略“else”命令,并将传递我给它的任何东西。

有什么建议吗?

【问题讨论】:

  • 您可以将输入转换为小写,因此即使用户输入大写 if 也会将其转换为小写,并且您可以在 if 大小写中使用 'y' 或 'n'。 'choice=str.lower(raw_input("Y/N: "))'
  • @Aशwiniचhaudhary 这个问题肯定很接近,但 Sudipta 给出了我真正想要的答案。
  • @TanveerAlam 也提供了一个很好的解决方案。谢谢你们!
  • @Sil 为什么使用"true" 而不是True?此外,您可以使用return 而不是使用global
  • @Sil 这没有意义,布尔 not 如何可重用?如果您稍后需要字符串表示,str(True).lower() == "true".

标签: python python-2.7


【解决方案1】:

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

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

你应该这样做:

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

或者,

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

或者你可以使用:

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

【讨论】:

    【解决方案2】:

    要添加到@Sudipta 的答案,一种方法是删除大小写并只取第一个字母:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2016-02-12
      • 1970-01-01
      • 2010-11-26
      相关资源
      最近更新 更多