我想将字符串的所有其他字母都转换为大写。例如,假设输入为'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:在字符串格式化期间并非所有参数都已转换
答案 0 :(得分:3)
您的代码有几个问题:
str.split
即可删除空格。在这里,没有必要。enumerate
。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'))