Skip to main content
 首页 » 编程设计

python之For循环不断迭代字符串中的相同字符两次

2025年05月04日23mayingbao

我正在尝试创建一个函数,它将接受一个字符串并将大写字母切换为小写字母,将小写字母切换为大写字母。

我试过制作函数,但问题是如何告诉函数只对每个字符运行一次。该函数遍历字符串,但在将大写/小写更改为大写/小写后,它又将其更改回原来的样子。

def uppertolower (string): 
    list1 = [] 
    for p,l in enumerate(string): 
        if p == l.upper(): 
            l = l.lower() 
        elif p == l.lower(): 
            l = l.upper() 
        list1.append(l) 
    return ''.join(list1) 

运行了以下程序:

uppertolower('AppLe') 

实际结果:AppLe

预期结果:苹果

如有任何帮助,我们将不胜感激。谢谢。

请您参考如下方法:

您的循环不需要将 p 与 enumerate 一起使用。 enumerate 将索引可迭代的值,因此始终是一个数字。

你无法比较...

p == l.upper()  # or l.lower() 

...成功地将数字与字符串进行比较。根据你的描述,我假设你想检查字母是大写还是小写。您应该将其与自身进行比较:

def uppertolower(string): 
    list1 = [] 
    for l in string: 
        if l == l.upper(): 
            l = l.lower() 
        elif l == l.lower(): 
            l = l.upper() 
        list1.append(l) 
    return ''.join(list1) 

正如其他答案指出的那样,您可以通过将 elif l == l.lower(): 更改为简单的 else: 来保存比较,因为偶数字符如数字调用 str.upper 时不会改变。

作为旁注,str.swapcase字符串存在方法来完成您的函数所做的事情。

此外,我建议您使用更具描述性的变量名称,例如 char 或 letter 而不是模棱两可的 l(尽管它是很明显 l 代表 letter,在某些字体中它可能被误认为是大写的 I 或数字 1 ).