python 基本大小写字符串

python basic uppercase and lowercase string

我正在尝试将给定字符串中的所有大写字符更改为小写字符,反之亦然。

所以我试图循环遍历每个字母(即 s),如果它是小写字母则将其更改为大写字母 "and" 反之亦然。

string='HeLLO'

result=list(s.upper() for s in string if s.lower() and s.lower() for s in string if s.upper())

print(result)

output: ['H', 'E', 'L', 'L', 'O', 'H', 'E', 'L', 'L', 'O', 'H', 'E', 'L', 'L', 'O', 'H', 'E', 'L', 'L', 'O', 'H', 'E', 'L', 'L', 'O']

if s.lower() 这是一个糟糕的条件,因为它只是降低字符的功能,与 if s.upper() 相同。请改用 s.isupper()

>>> print result = list((s.lower() if s.isupper() else s.upper() for s in string))
['h', 'E', 'l', 'l', 'o']

你的生成器逻辑是错误的:

s.upper() for s in string if s.lower() and s.lower() for s in string if s.upper()

第一部分是带条件的生成器 - 除了 if s.lower() 之外都可以。

第二部分也是生成器。

现在它只是第一个生成器的复杂条件(if ... and ...)

已经有一个方法可以做到这一点。

s = 'HelLo'
print(s.swapcase())

'hELlO'

What am I doing wrong, why isn't my code working?

虽然好的 python 代码可以看起来像(可执行的)伪代码并且读起来很像英语,但仅用英语说明您想做什么并期望 Python 做正确的事情是行不通的。不工作。 ;-)

特别是

中的关键字 and
s.upper() for s in string if s.lower() and s.lower() for s in string if s.upper()

并不像您认为的那样。 and 是一个布尔运算符,其工作方式如下:

True and True == True
True and False == False
False and True == False
False and False == False

在字符串上使用它(就像你在这里做的那样)会产生一个可能令人惊讶的结果:

"foo" and "bar" == "bar"
"" and "bar" == ""

请参阅其他答案以了解该怎么做。