【问题标题】:How can I change upper case to lower and vice versa?如何将大写更改为小写,反之亦然?
【发布时间】:2020-12-29 04:37:10
【问题描述】:

我正在玩一个小脚本,只是为了好玩。我正在尝试将字符串中的项目颠倒过来,并将大写字母从低到高。反向部分有效,但案例部分无效。我在这里做错了什么?

def reverse(s): 
    if len(s) == 0: 
        return s 
    else: 
        if s.lower():
           s.upper()
        else:
           s.lower() 
        return reverse(s[1:]) + s[0]     

mytxt = reverse("I wonder how this text looks like Backwards")
print(mytxt) 

这是我当前的输出。

sdrawkcab ekil skool txet siht woh rednow I

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    str.lower 不返回是否为小写的布尔值。它返回一个小写的字符串。它也不会更改字符串。

    既然如此,您需要检查您当前感兴趣的角色。

    在这种情况下s[0]。此外,字符串不是可变的,因此您无法就地更改它们。你需要一个临时变量。

    def reverse(s): 
        if len(s) == 0: 
            return s 
        else: 
            # The character of interest
            char = s[0]
            # If it's equal to the lowercase version of it
            if char == char.lower():
               # Change it to upper
               char = char.upper()
            else:
               # and vice versa
               char = char.lower() 
            return reverse(s[1:]) + char     
    
    mytxt = reverse("I wonder how this text looks like Backwards")
    print(mytxt) 
    

    【讨论】:

      【解决方案2】:

      s.lower() and s.upper() 不要修改s,而是返回另一个字符串,其中所有字母分别转换为小写或大写。它们也不返回布尔值(由 s.islower() and s.isupper() 完成)。

      如果你想重写s,你必须从返回值构造一个新的字符串。

      def reverse(s):
          if len(s) == 0:
              return s
          else:
              s0 = s[0]
              if s0.islower():
                  s0 = s0.upper()
              elif s0.isupper():
                  s0 = s0.lower()
              return reverse(s[1:]) + s0
      
      mytxt = reverse("I wonder how this text looks like Backwards")
      print(mytxt)
      

      这里我检查了islowerisupper,因为在没有大小写字符的情况下两者都返回False(例如"0".islower()"0".isupper() 都是假的)。

      【讨论】:

        【解决方案3】:

        str.lower()str.upper() 返回转换为大小写的字符串的副本。要检查字符串是小写还是大写,请使用str.islower()str.isupper()

        Python 也有 str.swapcase() 来做你想做的事。

        使用slice notation 可以简单地反转字符串,无需递归或循环。您的代码可以简化为:

        def swapcasereverse(s):
            return s[::-1].swapcase()
        

        如果您想为swapcase 编写自己的代码作为练习,这里有一个pythonic 方式:

        def swapcasereverse(s):
            newlist = [c.upper() if c.islower() else c.lower() for c in reversed(s)]
            return "".join(newlist)
        

        此函数使用列表推导

        • 以相反的顺序遍历s,每个字符进入c
        • 如果c 为小写,则将c.upper() 添加到列表中
        • 否则,将c.lower() 添加到列表中
        • 将列表与"" 连接成一个字符串,返回连接后的字符串

        【讨论】:

          【解决方案4】:
          def reverse(s):
              if len(s) == 0:
                  return s
              else:
                  if s.lower():
                      s.upper()
                  else:
                      s.lower()
          
          return reverse(s[1:]) + s[0]
          
          
          mytext = reverse("I wonder how this text looks like Backwards").swapcase()
          print(mytext)
          

          【讨论】:

          • 您至少可以修复缩进以便代码运行吗?谢谢。
          • if...else... 在这里也毫无意义。为什么不直接删除它?
          • 啊啊啊!现在它是有道理的。有趣的是,您如何看待错误的事物却看不到问题所在,但当您看到正确的事物时,您会立即意识到为什么它是正确的。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-26
          • 2013-09-21
          • 1970-01-01
          • 1970-01-01
          • 2016-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多