我想为任何给定的单词替换字母大写。所以我创建下面的功能。但是问题在于它不返回任何值。相反,我觉得它会无限循环。
def farrange(word):
finaloutput = ''
i = 0
for i in word:
if i%2 == 0:
finaloutput = finaloutput + word[i].upper()
else:
finaloutput = finaloutput + word[i].lower()
i = i + 1
return finaloutput
我知道还有其他方法可以解决问题。我使用了另一种元组拆包的方式。但是我想知道为什么会这样吗?
答案 0 :(得分:7)
问题是您要遍历单词并将其字母用作索引,这样可以解决此问题:
def farrange(word):
finaloutput = ''
for i, l in enumerate(word):
if i%2 == 0:
finaloutput += l.upper()
else:
finaloutput += l.lower()
return finaloutput
例如更Python化的方式:
def arrange(word):
op = (
str.upper,
str.lower
)
return "".join(op[x%2](l) for x, l in enumerate(word))
答案 1 :(得分:3)
您正在将i
用作循环变量(递增整数)和用于容纳字符串的变量。这就是为什么它不起作用。尝试使用此功能的固定代码:
finaloutput = ''
i = 0
for e in word:
if i%2 == 0:
finaloutput = finaloutput + e.upper()
else:
finaloutput = finaloutput + e.lower()
i = i + 1
return finaloutput
您还可以进行列表理解:
''.join([e.lower() if c%2 else e.upper() for c,e in enumerate(a)])
答案 2 :(得分:1)
您正在重用和覆盖变量i
。将一个i
更改为其他变量,例如:
def farrange(word):
finaloutput = ''
j = 0
for i in word:
if j%2 == 0:
finaloutput = finaloutput + i.upper()
else:
finaloutput = finaloutput + i.lower()
j = j + 1
return finaloutput
print(farrange("abc"))
输出:
AbC
答案 3 :(得分:1)
谢谢大家的解释和快捷方式! 如果我使用while循环怎么办?
def farrange(word):
finaloutput = ''
i = 0
while i < len(word):
if i%2 == 0:
finaloutput = finaloutput + word[i].upper()
else:
finaloutput = finaloutput + word[i].lower()
i = i + 1
return finaloutput
print(farrange("abc")
在这种情况下,我将i用作循环变量,并且它的相同值作为单词的索引。因此,我认为这应该可行,但是这次,我只得到第一封信。没有其他的。为了检查计数器是否没有陷入while循环中,我将while条件更改为while i < 3.
,但没有用。再次返回输出为。
答案 4 :(得分:1)
这是(几乎)一种衬管解决方案
altLttrs = lambda x :"".join([w.lower() if i%2
else w.upper()
for i, w in enumerate(list(x))])
答案 5 :(得分:0)
它肯定会锻炼...
def myfunc(word):
finaloutput = ''
for i, l in enumerate(word):
if i%2 == 0:
finaloutput += l.upper()
else:
finaloutput += l.lower()
return finaloutput
myfunc('mani')
输出:MaNi