【问题标题】:Swapping uppercase and lowercase in a string交换字符串中的大写和小写
【发布时间】:2016-07-14 19:36:30
【问题描述】:

我想将字符串的字符从小写更改为大写。

我的代码如下,我的代码得到的输出是a;你能告诉我我错在哪里并解释为什么吗? 在此先感谢

test = "AltERNating"

def to_alternating_case(string):
    words = list(string)
    for word in words:
        if word.isupper() == True:
            return word.lower()
        else:
            return word.upper()  

print to_alternating_case(test)

【问题讨论】:

  • 你的代码不起作用的原因是“return”会离开当前函数('to_alternating_case()')。如果你想为教育目的实现 .swapcase() - 改变“单词”列表而不是返回第一个字符。

标签: python string python-2.x uppercase lowercase


【解决方案1】:

那是因为你的函数只返回第一个字符。我的意思是 return 关键字会破坏您的 for 循环。

另外,请注意不必通过运行 words = list(string) 将字符串转换为列表,因为 you can iterate over a string 就像您对列表所做的那样。

如果您正在寻找算法解决方案而不是 swapcase(),那么请改用这种方式修改您的方法:

test = "AltERNating"

def to_alternating_case(string):
    res = ""
    for word in string:
        if word.isupper() == True:
            res = res + word.lower()
        else:
            res = res + word.upper()
    return res


print to_alternating_case(test)

【讨论】:

    【解决方案2】:

    您的循环遍历输入字符串中的字符。然后它从第一次迭代中返回。因此,您总是会得到一个 1 字符的返回值。

    test = "AltERNating"
    
    def to_alternating_case(string):
        words = list(string)
        rval = ''
        for c in words:
            if word.isupper():
                rval += c.lower()
            else:
                rval += c.upper()
        return rval    
    
    print to_alternating_case(test)
    

    【讨论】:

      【解决方案3】:

      如果你想反转那个字符串的大小写,试试这个:

      >>> 'AltERNating'.swapcase()
      'aLTernATING'
      

      【讨论】:

        【解决方案4】:

        你应该这样做:

        test = "AltERNating"
        
        def to_alternating_case(string):
            words = list(string)
            newstring = ""
                if word.isupper():
                    newstring += word.lower()
                else:
                    newstring += word.upper()  
            return alternative
        print to_alternating_case(test)
        

        【讨论】:

          【解决方案5】:

          对此有两个答案:一个简单的,一个困难的。

          简单的

          Python 有一个内置函数可以做到这一点,我不完全记得它是什么,但类似于

          string.swapcase()
          

          困难的人

          您定义自己的功能。你制作函数的方式是错误的,因为 对字符串进行迭代将逐个字母返回,您只需返回第一个字母,而不是继续迭代。

          def to_alternating_case(string):
              temp = ""
              for character in string:
                  if character.isupper() == True:
                      temp += character.lower()
                  else:
                      temp += word.upper()
              return temp
          

          【讨论】:

          • 在循环中连接字符串可能很慢。考虑先将它们添加到列表中,然后在最后加入 ''.join(list_of_chars)
          【解决方案6】:

          您在遍历单词 altering 后返回第一个字母表,这不是您所期望的。有一些建议是直接循环字符串而不是将其转换为列表,表达式if <variable-name> == True可以直接简化为if <variable-name>。作如下修改回答:

          test = "AltERNating"
          
          def to_alternating_case(string):
              result = ''
              for word in string:
                  if word.isupper():
                      result += word.lower()
                  else:
                      result += word.upper()
              return result
          
          print to_alternating_case(test)
          

          或者使用列表理解:

          def to_alternating_case(string):
              result =[word.lower() if word.isupper() else word.upper() for word in string]
              return ''.join(result)
          

          或使用映射,lambda:

          def to_alternating_case(string):
              result = map(lambda word:word.lower() if word.isupper() else word.upper(), string)
              return ''.join(result)
          

          【讨论】:

            【解决方案7】:
            contents='abcdefgasdfadfasdf'
            temp=''
            ss=list(contents)
            for item in range(len(ss)):
                if item%2==0:
                    temp+=ss[item].lower()
                else:
                    temp+=ss[item].upper()
            
            print(temp)
            

            您也可以在函数中添加此代码,并使用返回键代替打印

            【讨论】:

              【解决方案8】:
              string=input("enter string:")
              temp=''
              ss=list(string)
              for item in range(len(ss)):
                  if item%2==0:
                      temp+=ss[item].lower()
                  else:
                      temp+=ss[item].upper()
              print(temp)
              

              【讨论】:

                【解决方案9】:

                这里是困难方式的简短形式:

                alt_case = lambda s : ''.join([c.upper() if c.islower() else c.lower() for c in s])
                print(alt_case('AltERNating'))
                

                当我正在寻找一种解决方案,使全部大写或全部小写字符串交替大小写时,这里有一个解决这个问题的方法:

                alt_case = lambda s : ''.join([c.upper() if i%2 == 0 else c.lower() for i, c in enumerate(s)])
                print(alt_case('alternating'))
                

                【讨论】:

                  【解决方案10】:
                  def myfunc(string):
                      i=0
                      newstring=''
                      for x in string:
                          if i%2==0: 
                              newstring=newstring+x.lower()
                          else:
                              newstring=newstring+x.upper()
                          i+=1
                      return newstring
                  

                  【讨论】:

                    【解决方案11】:

                    你可以使用swapcase()方法

                    string_name.swapcase()
                    

                    或者你可以有点花哨并使用list comprehension

                    string = "thE big BROWN FoX JuMPeD oVEr thE LAZY Dog"
                    y =  "".join([val.upper() if val.islower() else val.lower() for val in string])
                    print(y)
                    
                    >>> 'THe BIG brown fOx jUmpEd OveR THe lazy dOG'
                    

                    【讨论】:

                      【解决方案12】:

                      这不使用任何“pythonic”方法,并使用 ASCII 以基本逻辑格式给出答案:

                      sentence = 'aWESOME is cODING'
                      
                      words = sentence.split(' ') 
                      sentence = ' '.join(reversed(words)) 
                      
                      ans =''
                      for s in sentence:
                          if ord(s) >= 97 and ord(s) <= 122:
                              ans = ans + chr(ord(s) - 32)
                          elif ord(s) >= 65 and ord(s) <= 90 :
                              ans = ans + chr(ord(s) + 32)
                          else :
                              ans += ' '
                      print(ans)
                      

                      所以,输出将是:Coding IS Awesome

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-09-13
                        • 1970-01-01
                        • 2021-05-31
                        • 2019-11-22
                        • 2021-08-14
                        • 1970-01-01
                        相关资源
                        最近更新 更多