2013-08-03 2 views
3

나는 시저 암호를 만들기에 충분한 파이썬을 배웠다고 생각했기 때문에 그것을 만들기 시작했고 벽돌 벽에 부딪혔다. 문구가 '안녕하세요'이고 변화가 루프에 대한 그냥 편지 내가 아닌 문자 H 주위에 루프, 1, 그래서 내 결과 인 경우Ord와 Chr을 사용하는 Python Caesar Cipher

phrase = raw_input("Enter text to Cipher: ") 
shift = int(raw_input("Please enter shift: ")) 
result = ("Encrypted text is: ") 

for character in phrase: 
    x = ord(character) 

    x = x + shift 


print chr(x) 

순간 : 여기

내 코드입니다 : j

전 단어 주위를 반복하고 시프트 int 변수가 무엇이든간에 각 문자를 이동하고 싶습니다.

어떻게 구문 변수를 반복 할 수 있습니까?

+1

는 단지 하나 개의 문자를 출력 있다면, 그리고 그 예상 마지막 문자는 무엇을 그 _when_은'인쇄에 대해 말할 것 '진술이 일어나고 있는가? –

+0

100 % 확실하지 않은 죄송합니다. 루프 내에서 인쇄를 시도했는데 그 결과는 다음과 같습니다. i, j는 별도의 줄에 있습니다. 루프가 작동하는 것처럼 보이지만 정보를 인쇄하는 방식에 문제가 있습니다. – BubbleMonster

+0

당신은 또한 예를 들어'az'로 일어날 일을 생각해야합니다. –

답변

2

에 코드 때문에 루프 문자의 끝에 'j'ord() 값 인쇄된다 'i' 같다. 새 문자를 목록에 저장해야하며 루프가 끝나면 결합하여 인쇄해야합니다.

new_strs = [] 
for character in phrase: 
    x = ord(character) 
    x = x + shift 
    new_strs.append(chr(x)) #store the new shifted character to the list 
    #use this if you want z to shift to 'a' 
    #new_strs.append(chr(x if 97 <= x <= 122 else 96 + x % 122)) 
print "".join(new_strs)  #print the new string 

데모 :

$ python so.py 
Enter text to Cipher: hi 
Please enter shift: 1 
ij 
+0

추가는 본질적으로 이동 된 문자를 연결하는 것은 바로 무엇입니까? – BubbleMonster

+0

@BubbleMonster 예,'list.append'는 목록의 끝에 항목을 추가합니다. –

1

각 암호화 된 문자를 result 문자열에 추가하십시오.

phrase = raw_input("Enter text to Cipher: ") 
shift = int(raw_input("Please enter shift: ")) 
result = "" 

for character in phrase: 
    x = ord(character) 
    result += chr(x + shift) 

print result 
+0

너무 고마워 작동 – BubbleMonster

0

시도 :

phrase = raw_input("Enter text to Cipher: ") 
shift = int(raw_input("Please enter shift: ")) 
result = ("Encrypted text is: ") 
import sys 
for character in phrase: 
    x = ord(character) 
    x = x + shift 
    sys.stdout.write(chr(x)) 
    sys.stdout.flush() 
관련 문제