需要使用bash echo命令输入的python caesar cipher one liner的语法帮助

时间:2014-03-03 22:29:34

标签: python bash piping

我正在尝试为一个caeasar密码写一个python one liner,从echo接收输入并将它移动3个字符。当我运行它时,我收到语法错误消息。如果有人能指出我的语法错误,我将不胜感激。我在os os 6上使用python 2.6。

〜$ echo“HELLO”| python -c“import sys; print''。join(chr(ord(line)+ 3ys.stdin])”

档案“”,第1行

import sys; print ' '.join(chr(ord(line)+3)[for line in sys.stdin])
                                              ^

SyntaxError:语法无效

当然,输出应该打印:KHOOR。

谢谢。

2 个答案:

答案 0 :(得分:1)

我认为你想要的是

import sys; print ' '.join([chr(ord(line)+3) for line in sys.stdin])
                           ^

Doc for list comprehensions

答案 1 :(得分:1)

立即语法错误是因为您正在使用方括号for line in sys.stdin。这些是不必要的,应该简单地删除。

但是,您的代码仍然存在问题,因为您在整行上调用ord,而不仅仅是单个字符。您可能需要一个额外的循环来迭代每行的字符。在下面的代码中,这就是我所做的,进一步添加剥离线,以便我们不会尝试将换行符转换为奇怪的东西:

import sys; print "\n".join("".join(chr(ord(char)+3) for char in line.strip()) for line in sys.stdin)