>source

알파벳의 각 문자를 주어진 시프트를 기반으로 해당 인코딩된 문자와 쌍을 이루는 다음 함수를 만들었습니다.

alphabet= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
def build_cipher(shift):
    '''
    Description: takes in shift (an integer representing the amount the letter key in the dictionary is shifted from its corresponding letter) and returns a dictionary containing all letters and their corresponding letters after the shift. This is achieved through subtracting the shift from the number corresponding to the letter, and using modulo 26.
    >>> build_cipher(-3)
    {'a': 'x', 'b': 'y', 'c': 'z', 'd': 'a', 'e': 'b', 'f': 'c', 'g': 'd', 'h': 'e', 'i': 'f', 'j': 'g', 'k': 'h', 'l': 'i', 'm': 'j', 'n': 'k', 'o': 'l', 'p': 'm', 'q': 'n', 'r': 'o', 's': 'p', 't': 'q', 'u': 'r', 'v': 's', 'w': 't', 'x': 'u', 'y': 'v', 'z': 'w'}
    '''
    return {alphabet[i]: alphabet[(i + shift) % 26] for i in range(0, 26)}

다음으로 텍스트와 시프트를 받아 인코딩된 텍스트를 반환하는 인코딩 함수를 정의해야 합니다. 이 작업을 수행하려면 build_cipher 함수도 사용해야 합니다. 지금까지 나는 가지고있다 :

def encode(text, shift):
    '''
    Description: takes in a text string and shift. Returns the text string encoded based on the shift.
    >>> encode('test', -4)
    >>> encode('code', 5)
    '''
    #return (text[(i + shift) % 26] for i in range(0,26))
    #return (build_cipher(shift) for text in alphabet)
    #return (build_cipher(shift) for text in range(0,26))

반환 진술에 대한 나의 각 시도는 하단의 주석에 있습니다. 어느 것도 제대로 작동하지 않으며 build_cipher가 사전으로 반환되기 때문에 정확하게 수행하는 방법이 확실하지 않습니다. 이것을 달성하는 방법에 대한 모든 팁을 주시면 감사하겠습니다.

  • 답변 # 1

    이미 암호 작성 기능을 만들었습니다. 이제 이를 사용하여 암호를 만들고 텍스트의 각 문자에 적용해 보겠습니다. 나는 여기에서 사용했다가져 오기암호에 없는 문자를 변경하지 않고 유지할 수 있습니다.

    def encode(text, shift):
        cipher= build_cipher(shift)
        return ''.join(cipher.get(c, c) for c in text)
    

    예:

    >>> encode('good morning', 4)
    'kssh qsvrmrk'
    >>> encode('kssh qsvrmrk', -4)
    'good morning'
    

    주의. 귀하의 code는 현재 대문자를 처리하지 않습니다. 이 문제를 수정해야 합니다. ;)

  • 이전 docker : yaws가 httpc:도커 컨테이너에서 제공하는 URL 요청과 충돌합니다.
  • 다음 c++ : sprintf를 사용하여 16진수 값 변환 및 인쇄(선행 0 유지)