我正在尝试创建一个函数,它将接受一个字符串并将大写字母切换为小写字母,将小写字母切换为大写字母。
我试过制作函数,但问题是如何告诉函数只对每个字符运行一次。该函数遍历字符串,但在将大写/小写更改为大写/小写后,它又将其更改回原来的样子。
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 ).
