【问题标题】:Looping String difficulty python 3循环字符串难度python 3
【发布时间】:2019-03-10 11:00:48
【问题描述】:

此代码的功能是将偶数索引中出现的字母大写,奇数索引中出现的字母小写。此外,如果单词之间出现空格,则必须将索引重置为 0。如您所见,第一个和第二个单词被正确执行。然而,第三个词是不正确的。不是 C 和 S 大写,而是分别将 0 和 2 索引,A 和 E 大写。

string = 'Weird string case'
result = ''
i=0
for m in string:
    if(i%2==0):
       result = result+m.upper()
       i+=1
    elif(m==' '):
       result = result + m
       i=0
    else:
       result = result + m.lower()
       i+=1
    print(result)

电流输出

 WeIrD StRiNg cAsE

预期输出

 WeIrD StRiNg CaSe

【问题讨论】:

    标签: python string loops


    【解决方案1】:

    我会使用另一个列表

        string = 'Weird string case'
        words = string.split(" ") #This creates a list of substrings from your original string
        result = ''
        for word in words:
            for m in string:
                if(i%2==0):
                   result = result+m.upper()
                   i+=1
                elif(m==' '):
                   result = result + m
                   i=0
                else:
                   result = result + m.lower()
                   i+=1
               `enter code here` print(result)
    

    【讨论】:

      【解决方案2】:

      如果我们枚举string,我们可以将if, elif, else 语句缩减为if, else,对于我们的upper.() 来说,not i % 2not i % 2,对于更低的else。我们可以将它们附加到列表中,然后使用''.join(res) 打印最终产品。 map 也是一个选项,列表理解

      地图

      s = 'Weird string case'
      res = list(map(lambda x: x.upper() if not s.index(x) % 2 else x.lower(), s))
      print(''.join(res))
      

      列表理解

      res = [v.upper() if not i % 2 else v.lower() for i, v in enumerate(s)]
      print(''.join(res))
      

      完整循环:

      res = []
      
      for i, v in enumerate(s):
          if not i % 2:
              res.append(v.upper())
          else:
              res.append(v.lower())
      
      print(''.join(res))
      
      WeIrD StRiNg cAsE
      

      【讨论】:

        【解决方案3】:

        小交换可以解决问题:

        string = 'Weird string case'
        result = ''
        i=0
        for m in string:
            if(i%2!=0):
               result = result+m.lower()
               i+=1
            elif(m==' '):
               result = result + m
               i=0
            else:
               result = result + m.upper()
               i+=1
            print(result)
        

        或者有一个两行,(可能是一个很长的),一个列表理解和一个​​map和两个joins:

        s=''.join([i.lower() if idx%2 else i.upper() for idx,i in enumerate(string)]).split()
        print(' '.join(map(lambda x: x.swapcase() if x[0].islower() else x,s)))
        

        【讨论】:

          【解决方案4】:

          我没有被明确要求,但我们可以先标记字符串。这使它成为单个单词的大小写:

          import re
          string = 'Weird string case'
          result = ''
          for word in re.split("\\s+", string):
              for index, char in enumerate(word, 1):
                  result = result+char.lower() if index%2==0 else result + char.upper()
              result += " "
          print(result)
          

          常规的 string.split(" ") 也可以。我刚刚将正则表达式用于演示目的。

          【讨论】:

            【解决方案5】:

            这似乎已经解决了。

            string = 'Weird string case'
            result = ''
            i=0
            for m in string:
                if(i%2==0):
                   result = result+m.upper()
                   i+=1
                elif(m==' '):
                   result = result + m
                   i=1
                else:
                   result = result + m.lower()
                   i+=1
                print(result)
            

            【讨论】:

              【解决方案6】:

              您应该首先测试m 是否为空格;否则,如果i 为偶数时出现空格,则i 不会被重置:

              string = 'Weird string case'
              result = ''
              i=0
              for m in string:
                  if(m==' '):
                     result = result + m
                     i=0
                  elif(i%2==0):
                     result = result+m.upper()
                     i+=1
                  else:
                     result = result + m.lower()
                     i+=1
                  print(result)
              

              【讨论】:

                猜你喜欢
                • 2019-03-26
                • 2018-03-27
                • 1970-01-01
                • 1970-01-01
                • 2021-12-17
                • 1970-01-01
                • 2013-11-23
                • 2017-12-18
                • 2015-03-25
                相关资源
                最近更新 更多