liyuhao liyuhao - 28 days ago 9
Python Question

better way to invert case of string

I am learning python and meet an exercise:


Strings. Create a function that will return another string similar to the input string, but with its case inverted. For example, input of "Mr. Ed" will result in "mR. eD" as the output string.


My Code is:

name = 'Mr.Ed'
name_list = []

for i in name:
if i.isupper():
name_list.append(i.lower())
elif i.islower():
name_list.append(i.upper())
else:
name_list.append(i)

print ''.join(name_list)


Is there any better way to solve it? My solution seems strange.

Answer

Your solution is perfectly fine. You don't need three branches though, because str.upper() will return str when upper is not applicable anyway.

With generator expressions, this can be shortened to:

>>> name = 'Mr.Ed'
>>> ''.join(c.lower() if c.isupper() else c.upper() for c in name)
'mR.eD'