2014-03-03 8 views
0

에코에서 입력을 가져 와서 3 문자를 이동하는 caeasar 암호 용 파이썬 하나의 라이너를 작성하려고합니다. 실행하면 구문 오류 메시지가 나타납니다. 누군가가 구문을 잘못 이해하고 있다고 지적 할 수 있다면 고맙겠습니다. 나는 파이썬 2.6을 센트 OS 6에서 사용하고있다.파이썬 caeasar 암호에 대한 도움말이 필요합니다. bash echo 명령의 입력을 사용합니다.

~ $ echo "HELLO"| 파이썬 -c "수입 SYS; 인쇄 ''.join (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을 호출하기 때문에 코드에 문제가있는 것입니다. 각 라인의 문자를 반복 처리하려면 추가 루프가 필요할 것입니다. 다음 코드에서는 줄 바꿈을 추가하여 줄 바꿈 문자를 이상한 것으로 바꾸려고 시도하지 않았습니다.

+0

~ $ echo "HELLO"| sys.stdin의 행에 대해 python -c "import sys; print" ".join (" "(line.strip()의 char에 대한 join (chr (ord (char) +3))" 내가 제안한 것을 할 때 빈 줄이나 공백 줄이 인쇄되는 것 같습니다. –

+0

명령 줄에 따옴표를주의하십시오! 나는 당신의 껍질과 파이썬 사이에 일들이 왜곡되어 있다고 생각한다. 윈도우즈에서는 파이썬 코드의 작은 따옴표와 쉘의 큰 따옴표를 사용하여 작동하도록했습니다. 유닉스 계열의 시스템에서 어느 쪽에서도 작동 할 것이라고 생각합니다. 두 곳을 동일하게 사용하지 마십시오 (내부의 것을 제외하고 싶지 않은 경우). – Blckknght

+0

예를 들어'echo "HELLO"| 파이썬 -c 'import sys; sys.stdin의 행에 대해 "\ n".join (""(line) (line.strip()의 char에 대한 join (chr (ord (char) +3)) ' ' – fredtantini

1

을 나는 당신이 원하는 것은

생각

Doc for list comprehensions.

+0

도움을 주셔서 감사합니다. 그것은 캐릭터가 문자열이 아닌 경우에만 그것을 좋아해요 ord 보인다. bob @ pbx : ~ $ echo "HELLO"| (가장 최근 호출 마지막) : 파일 "", 줄 1, 줄 2, 줄 3, 줄 2, 줄 3, in TypeError : ord() 예상 문자, 길이가 6 인 문자열 –