【问题标题】:if/else statements accepting strings in both capital and lower-case letters in pythonif/else 语句在 python 中接受大写和小写字母的字符串
【发布时间】:2015-07-28 10:21:18
【问题描述】:

“if”语句是否有一种快速的方法来接受一个字符串,无论它在 python 中是小写、大写还是两者兼而有之?

我正在尝试编写一段代码,其中可以输入数字“3”以及单词“three”或“Three”或任何其他大写和小写的混合体,但仍会被接受通过代码中的“if”语句。我知道我可以使用“或”让它接受“3”以及任何其他字符串,但是不知道如何让它在不止一种情况下接受字符串。到目前为止,我有:

if (Class == "3" or Class=="three"):
    f=open("class3.txt", "a+")

【问题讨论】:

  • 使用.lower() 规范化用户提供的值?
  • 或者如果你有很多 if/else 那么我宁愿建议有一个 func foo 将 3 转换为 3...

标签: python if-statement uppercase lowercase capitalize


【解决方案1】:

只需使用str.lower()Class 转换为小写并进行测试。

if Class == "3" or Class.lower() == "three":
    f=open("class3.txt", "a+")

当然,你也可以使用str.upper()

if Class == "3" or Class.upper() == "THREE":
    f=open("class3.txt", "a+")

最后一件事是您可以使用in 同时检查"3""three"

if Class.lower() in {"3", "three"}:
    f=open("class3.txt", "a+")

in 用于if 语句时,您有多种选择。您可以使用我使用的集合{"3", "three"}、列表["3", "three"] 或元组("3", "three")

最后要注意的是,在"3" 上调用str.lower()str.upper() 会得到"3",但是在整数3 上调用它会抛出错误,所以你不能使用in 如果3 作为整数是Class 的可能值。

【讨论】:

  • 在上一个示例中,您可能需要考虑使用 set 代替:{'3', 'three'}。它不仅提供更快的查找速度,而且是适合工作的数据类型。
【解决方案2】:

通常要进行不敏感的比较,我会将变量设为小写。尽管Class 是一个有风险的名称,因为class 是关键字,但您可以执行以下操作

Class = Class.lower()
if(Class =="3" or Class=="three"):

等等

只有当您不需要为以后的任何事情保留案例时,我才会将其保存为较低,特别是如果您还有其他比较,例如与“四”的比较

【讨论】:

  • 在 if 之前使用 lower 就可以了,但你的 Class == 3 将永远不会匹配,因为它试图将 int 3 匹配到字符串 3。应该有 Class == "3"
【解决方案3】:

您可以将in 运算符与list 一起使用。

if Class.lower() in ['3', 'three']:

仅供参考'3'.lower() 返回字符串3

>>> '3'.lower()
'3'

【讨论】:

    【解决方案4】:

    使字符串小写:

    Class.lower() == "three"
    

    【讨论】:

      【解决方案5】:

      您可以强制所有字符串为小写,并且只检查小写,如下所示:

      if (Class == "3" or Class.lower() == "three"):
          f=open("class3.txt", "a+")
      

      【讨论】:

        【解决方案6】:

        如果您使用string.lower(),您可以将整个字符串转为小写,这样您就可以在 if 语句中检查它。只需将字符串替换为您的实际字符串即可。所以Class.lower()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-06
          • 2019-08-08
          • 1970-01-01
          • 2020-01-04
          • 2013-04-14
          相关资源
          最近更新 更多