大写备用字母

时间:2018-06-22 16:18:41

标签: python

我想为任何给定的单词替换字母大写。所以我创建下面的功能。但是问题在于它不返回任何值。相反,我觉得它会无限循环。

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

我知道还有其他方法可以解决问题。我使用了另一种元组拆包的方式。但是我想知道为什么会这样吗?

6 个答案:

答案 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