【问题标题】:How to change case for alternative letters of a string如何更改字符串的替代字母的大小写
【发布时间】:2018-09-05 10:04:01
【问题描述】:

我想将字符串的所有其他字母转换为大写。例如假设输入是'ahdjeryu',结果应该是'AhDjErYu'

我正在尝试这个:

def mycode(letters):
    myword = letters.split()
    for i in letters:
        if i%2 == 0:
            return i.upper()
        else:
            return i.lower()
print(mycode('ahdjeryu'))

抛出的错误为: if i%2==0:

TypeError:字符串格式化期间并非所有参数都转换

【问题讨论】:

  • 请像这样使用for i in range(len(letters))

标签: python string for-loop


【解决方案1】:

您的代码存在几个问题:

  1. 您只需要使用str.split 来删除空格。在这里,没必要。
  2. 要提取字母和字母的索引,请使用enumerate
  3. return 只会返回一封信。您可以改为 yield 字母,然后在生成器上使用 str.join

这是一个工作示例:

def mycode(letters):
    for idx, i in enumerate(letters):
        if idx % 2 == 0:
            yield i.upper()
        else:
            yield i.lower()

print(''.join(mycode('ahdjeryu')))

AhDjErYu

上面的逻辑可以通过生成器理解等效地实现:

res = ''.join(i.upper() if idx % 2 == 0 else i.lower() for idx, i in enumerate(letters))

【讨论】:

    【解决方案2】:

    您的i 是一个字符的字符串,而不是索引。所以你不能做i%2。使用enumerate获取索引和值。

    alternating = ''.join(letter.upper() if index%2==0 else letter.lower() for index, letter in enumerate(text) 
    

    【讨论】:

      【解决方案3】:

      是的,它出错了,因为i 现在是字母而不是数字,所以它不能修改为 2。

      我不确定 Python 中 for 循环的语法,但您可以尝试一下:

          cnt = 0 
          for i in letters:
              if cnt%2 == 0:
                  return i.upper()
              else:
                  return i.lower()
              cnt++
      

      希望对你有帮助!

      如果我有任何错误,请纠正我。谢谢

      【讨论】:

        【解决方案4】:

        @Abhi,这符合您的原始逻辑。您需要r 来获取字符串中字母的索引。

        def mycode(letters):
            for ch in letters:
                r=letters.index(ch)
                if r%2 == 0:
                        letters=letters.replace(ch,letters[r].upper())
                else:
                        letters=letters.replace(ch,letters[r].lower())      
            return letters
        print(mycode('ahdjeryu'))
        

        【讨论】:

          猜你喜欢
          • 2011-05-12
          • 1970-01-01
          • 2014-06-20
          • 2012-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-06
          • 2011-01-07
          相关资源
          最近更新 更多