如何更改字符串的替代字母的大小写

时间:2018-09-05 10:04:01

标签: python string for-loop

我想将字符串的所有其他字母都转换为大写。例如,假设输入为'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:在字符串格式化期间并非所有参数都已转换

4 个答案:

答案 0 :(得分:3)

您的代码有几个问题:

  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))

答案 1 :(得分:2)

您的i是一个字符的字符串,而不是索引。因此,您无法执行i%2。使用enumerate来获取索引和值。

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

答案 2 :(得分:0)

是的,它是错误的,导致i现在是字母而不是数字,因此不能修改为2。

我不确定在Python中通过for循环的语法,但是您可以尝试:

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

希望它可以为您提供帮助!

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

答案 3 :(得分:0)

@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'))