2014-03-03 45 views
0

我正在嘗試爲caeasar密碼寫一個python一行,從echo輸入並將它轉換爲3個字符。當我運行它時,我收到一條語法錯誤消息。如果有人能指出我的語法錯誤,我將不勝感激。我正在使用python 2.6上分os 6.python caeasar cipher需要語法幫助一個班輪輸入從bash echo命令

〜$ echo「HELLO」|蟒-c 「進口SYS;打印 ''。加入(CHR(ORD(線)+ 3ys.stdin])」

文件 「」,第1行

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

語法錯誤:無效的語法

當然的了放應打印:。KHOOR

謝謝

回答

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) 
+0

〜$ echo「HELLO」| python -c「import sys; print」「.join(」「。用於在line.strip()中的字符的加入(chr(ord(char)+3)用於sys.stdin中的行)」感謝您的幫助。當我按照你的建議去做時,似乎打印出一行空白或一行空格。 –

+0

請小心命令行上的引號!我懷疑你的shell和Python之間的東西是亂碼的。在Windows中,我通過在Python代碼中使用單引號和爲shell使用雙引號來使其工作。在一個類似Unix的系統上,我認爲兩者都可以在任何地方工作,只是不要在兩個地方使用相同的地方(除非你想逃避內部)。 – Blckknght

+0

例如使用'echo「HELLO」| python -c'import sys;打印「\ n」.join(「」。對於sys.stdin中的行,加入(chr(ord(char)+3)用於line.strip()中的char)' ' – fredtantini

1

我想你想要的是

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

Doc for list comprehensions

+0

感謝您的幫助。它似乎只是在它得到一個字符而不是一個字符串時才喜歡它。 bob @ pbx:〜$ echo「HELLO」| python -c「import sys; print''.join([chr(ord(line)+3)for sys.stdin]) 在 TypeError:ord()期望一個字符,但是找到長度爲6的字符串 –