【问题标题】:islower() for strings - Pythonislower() 用于字符串 - Python
【发布时间】:2015-07-09 21:58:02
【问题描述】:

我正在做一些 Python 自学(非常初学者)并且对我得到的这个练习感到困惑 - 旨在检查字符串是否有任何小写字母:

def is_lower(word):
    for x in word:
        if x.islower():
            return True
        else:
            return False

is_lower("Cat") 返回False

is_lower("cAt") 返回True

is_lower("caT") 返回True

我不确定为什么会出现这些差异 - 它似乎只是在测试单词的第一个字母,我不确定为什么。我认为它应该遍历单词的每个字母,因为它是一个 for 循环

【问题讨论】:

    标签: python string function


    【解决方案1】:

    你需要不断循环,直到你读完所有字符。

    for x in word:
        if x.islower():
            # We found *one* lower case letter, so return True
            return True
    # We found *no* lower case letters, so return False
    return False
    

    或者,您可以简化:

    return any(x.islower() for x in word)
    

    【讨论】:

    • 如果你真的想简化,为什么不做word.islower()
    • @ekhumoro 如果所有字符都是小写,则返回True,如果任何字符都是小写,OP想要返回True
    【解决方案2】:

    在您第一次执行该循环时,您要么点击返回 True 的 if 语句,要么点击返回 False 的 else 语句。你永远不会到达第二个角色。

    def is_lower(word):
    
        for x in word:
            if x.islower():
                #Found a lowercase letter!
                return True
        #Okay, now we're done with the for loop.
        #We have not encountered any lower case letters
        return False
    

    【讨论】:

      【解决方案3】:

      这与编程控制流程有关。 当函数遇到 return 语句时,它将停止函数并将值返回到调用函数的位置。

      对于单词Cat,您将使用for x in word:语句逐个循环真实单词,首先检查第一个字母C,它不低于,所以它返回False函数停止和其他字母不检查。

      单词cAt也是如此,它检查第一个字母ac,它是小写的,到达return True并且函数停止。

      改为使用如下构建的函数:

      for x in word:
          if x.islower():
              return True
      return False
      

      这里将检查每个字母是否较低,如果其中一个较低,则返回 True。只有在最后没有一个字母较低时,它才会返回 False。

      【讨论】:

        【解决方案4】:

        如果您想要单线:

        print True if any(x.islower() for x in word) else False
        

        【讨论】:

          【解决方案5】:
          def is_lower(word):
              for x in word:
                  if x.islower():
                      return True
              return False
          

          应该可以解决问题。基本上,遍历所有字母,如果有小写字母,则返回 True(并因此退出整个函数)。如果在 for 循环结束时还没有返回,则返回 False。

          【讨论】:

            【解决方案6】:

            您在第一个循环中直接从函数中返回。你说的是

            1. 遍历所有字母
              1. 检查此字母是否为小写
              2. 我们完成了!返回该值

            你可能想要做的是

            for x in word:
                if x.islower():
                    return True
            else:
                return False
            

            这将查找第一个字母,如果找到小写字母,则返回 True

            【讨论】:

            • 这实现了错误的逻辑。它检查 all 字符是否为小写,OP 想要检查 any 字符是否为小写。
            猜你喜欢
            • 2016-08-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-24
            • 1970-01-01
            • 2018-12-21
            • 2018-07-22
            • 2015-01-30
            相关资源
            最近更新 更多