map函数使用,大小写转换,问题

def f(x):
if'a'<x<'z':
return(chr(ord(x)-32))
if'A'<x<'Z':
return(chr(ord(x)+32))
a=map(f,['a','d','H'])
print(list(a))
结果:
[None, 'D', 'h']
求解答一下:为什么a的转换不是A,而是None呀

因为a不满足条件啊,即不大于'a',也不小于'Z'
除非你把 if 'a'<x<'z' 换成 if 'a'<=x<='z'
同样的,下面判断大写字母的语句最好也改成 if 'A'<=x<='Z'

除了if判断要用<=外,还有加上一句return x
否则列表中有字母外的字符会被转成None的

>>> def f(x):
  if 'a'<=x<='z':
    return chr(ord(x)-32)
  if 'A'<=x<='Z':
    return chr(ord(x)+32)
  return x

>>> [*map(f,['a','d','H','4'])]
['A', 'D', 'h', '4']

如有帮助,请采纳!