2017-02-01 1 views
0

저는 시저 - 사이퍼 (cesher-cypher) 함수를 만들 예정입니다. 내가 내장 된 ord() 및 chr() 함수를 사용하여 내 과정에서 사용하는 교과서에서이 작업을 수행하는 것이 좋습니다. 그게 최선의 방법 일 수도 있고 그렇지 않을 수도 있습니다. (내가 봤던 것이 아닙니다.) 그러나 그들이 당신이하기를 원하는 것입니다.Caesar-cypher : ord() 함수는 문자열을 받거나 정수를 받았다고 말합니다.

내 문제는 for 루프에서 ordhol() 함수에 placeholder 변수를 보낼 때 길이가 1 인 문자열을 예상했지만 대신 정수를 받는다는 오류가 발생합니다. 이 바로 앞에 변수 c가 'i'값을 가지고 있는지 확인하기 위해 print 함수를 넣었지만 관계없이 실패한 것으로 보입니다. 여기

제가 생성 함수이다

def rotate_word(word, num): 
    count = 0 
    newWord = '' 
    while count < len(word): 
     for c in word: 
      print(c) 
      newWord += chr(((ord(c)) - (ord(num) -1))) 
      count += 1 
    print(newWord) 

그리고이 I 나타나는 오류이다

rotate_word('ibm', -1) 
i 
Traceback (most recent call last): 
    File "<pyshell#95>", line 1, in <module> 
    rotate_word('ibm', -1) 
    File "<pyshell#94>", line 7, in rotate_word 
    newWord += chr(((ord(c)) - (ord(num) -1))) 
TypeError: ord() expected string of length 1, but int found 

이 오류가 -1 이상 또한 다른 정수 발생. 공정하기 위해서, 코드 자체가 내가 원하는 것을하지 않는다면 완전히 확신 할 수 없다. (나는이 부분을 이해하려고 노력했지만,이 부분이 없다면 나머지 부분을 보장하는 것이 중요하지 않다.)

+1

'ord (num)', 그냥'num'을 사용하지 마십시오 :) – GAVD

답변

0

ord 매개 변수로 string를 받아 int를 반환

하나 개의 유니 코드 문자를 나타내는 캐릭터 라인을 감안할 때, 그 문자의 유니 코드 코드 포인트를 나타내는 정수를 반환합니다. 예를 들어, ord ('a')는 정수 97을 반환하고 ord ('€') (유로 기호)는 8364를 반환합니다. 이것은 chr()의 역입니다.

코드에서 사용자가 명령 줄에 표시되는 오류를 대신 제공하는 int을 전달합니다. num을 (으)로 변환 할 필요가 없습니다. 그냥 번호로 문자를 변환 회전 금액을 추가하고 chr 다시 문자로 결과를 다시 변환 : 위의 'a'가 왼쪽으로 회전 또는 'z'되어 오버 플로우/언더 플로우의 경우를 처리하지 않습니다

def rotate_word(word, num): 
    count = 0 
    newWord = '' 
    while count < len(word): 
     for c in word: 
      newWord += chr(ord(c) + num) 
      count += 1 
    print(newWord) 

rotate_word('ibm', -1) # 'hal' 

참고 회전 권리.

+0

답장과 미주 주셔서 감사합니다. 나는 ord의 두 번째 호출에서 int 문제를 깨달았지만 over/under-flow에 대해서는 생각하지 않았다. 고맙습니다. – mwierda

관련 문제