Python 如果需要,请列出理解

Python 如果需要,请列出理解,python,list,list-comprehension,Python,List,List Comprehension,给定一个句子,返回该句子将其字母在字母表中转置为1,但仅当字母为a-y时 # input 'the quick brown fox jumps over the lazy dog' # output 'uif rvjdl cspxo gpy kvnqt pwfs uif mbzy eph' 我试过这个: a = [chr(ord(i) + 1) if ord(i) != ord(' ') else i if i =='y' else i for i in input() if ord(i) &

给定一个句子,返回该句子将其字母在字母表中转置为1,但仅当字母为a-y时

# input
'the quick brown fox jumps over the lazy dog'
# output
'uif rvjdl cspxo gpy kvnqt pwfs uif mbzy eph'
我试过这个:

a = [chr(ord(i) + 1) if ord(i) != ord(' ') else i if i =='y' else i for i in input() if ord(i) < ord('z')]
print(''.join(a))
这项工作:

a = 'the quick brown fox jumps over the lazy dog'
print(''.join([c if c == ' ' or ord(c) >= ord('y') else chr(ord(c) + 1) for c in a]))
输出

uif rvjdl cspxo gpy kvnqt pwfs uif mbzy eph

下面的代码应该可以做到这一点。我更改了您的一些条件,并删除了结尾处的条件(
ord(I)
),因为它阻止处理“z”字符

此外,比较运算符处理字符和整数,因此在条件中不必总是使用“ord()”

a = [chr(ord(i) + 1) if i != ' ' and i < 'y' else i for i in input()]

print(''.join(a))
a=[chr(ord(i)+1)if i!=''and i<'y'else i for i in input()]
打印(“”.加入(a))

如果我理解了说明,此代码对我有效:

what_to_return = ""
for char in input():
    what_to_return += char if char == 'y' or char == 'z' else chr(ord(char) + 1) if 'a' <= char < 'z' else " "

您是否必须使用列表理解来完成此操作?它看起来非常复杂。一个简单的for循环将完成这项工作,并且更容易理解尾随的
i的意义是什么,如果i='y'否则i
?它的计算结果似乎总是
i
。您能澄清一下为什么期望输出
mbzy
?将所有字母按一移位应将
lazy
转换为
mbzz
mbaz
,具体取决于
z
的移位方式。为什么
y
会被保留?另一个注释是:“可读性计数”。我不确定将整个操作装配在一行上是否是您的任务的一部分,但它远不可读。我敢打赌,如果你在几周后阅读了这段代码,你一定会搞不清楚它是关于什么的。不要害怕把它分解成更简单的操作,更容易理解。
what_to_return = ""
for char in input():
    what_to_return += char if char == 'y' or char == 'z' else chr(ord(char) + 1) if 'a' <= char < 'z' else " "
uif rvjdl cspxo gpy kvnqt pwfs uif mbzy eph