首页 > 解决方案 > For循环不断迭代字符串中的相同字符两次

问题描述

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

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

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

实际结果:AppleLe

预期结果:苹果

任何帮助将不胜感激。谢谢。

标签: python

解决方案


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

你无法比较...

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方法存在于字符串以完成您的函数所做的事情。

另外,我建议您使用更具描述性的变量名称,例如charorletter代替模棱两可的名称l(尽管l代表相当明显,但在某些字体中letter可能会被误认为是大写字母I或数字)。1


推荐阅读