성의 각 문자를 알파벳의 연속 문자로 대체하는 방법은 무엇입니까? 이 스크립트가 마스킹 도구로 필요합니다. 마지막 이름성별의 각 문자를 알파벳의 연속 문자로 바꿉니다.
로직 (B 로의 변경, B에서 C 변화, ...., A와 Z 변경)
예 : 홍길동해질 것이다 존 EPF
입력 파일 : names.txt
John yi
kary Strong
Joe Piazza
So man
성의 각 문자를 알파벳의 연속 문자로 대체하는 방법은 무엇입니까? 이 스크립트가 마스킹 도구로 필요합니다. 마지막 이름성별의 각 문자를 알파벳의 연속 문자로 바꿉니다.
로직 (B 로의 변경, B에서 C 변화, ...., A와 Z 변경)
예 : 홍길동해질 것이다 존 EPF
입력 파일 : names.txt
John yi
kary Strong
Joe Piazza
So man
다음과 같이 해결 될 수 귀하의 질문에 정의 된 문제 : 다음
parts = name.split()
parts[1]=''.join([chr((ord(c) - 65 + 1) % 26 + 65)
if ord(c) < 91 else
chr((ord(c) - 97 + 1) % 26 + 97)
for c in parts[1]])
' '.join(parts)
, 나는 물론이 강한 가정이다, 문자열의 두 번째 단어로 성을 정의하지만에 대한 개선 이것은 질문의 주된 문제가 아닙니다.
문자를 이동하는 것은 목록 내에서 수행되며 각 문자는 별도로 처리되며 처음에는 ord
을 사용하여 ASCII 코드로 변환됩니다. 대문자의 ASCII 코드는 65-90 (A
- Z
)이며 소문자 ASCII 코드는 97-122 (a
- z
)입니다. 따라서 조건을 분리하는 데 ord(c) < 91
조건이 사용됩니다. 그런 다음 각각의 경우에 ASCII 코드는 0-25 범위의 값으로 변환되고 (이 예제에서는 1 씩 증가됨) 모듈러 연산 % 26
은 z
을 a
으로 다시 변환하는 데 사용됩니다. 결과 값은 문자 ASCII 코드의 적절한 범위로 다시 변환됩니다.
이것을 Caesar's cipher이라고합니다. 당신은 조금뿐만 아니라 대문자를 허용하도록 변경해야합니다 https://stackoverflow.com/a/8895517/6664393
: 하나에 의해 이동하는
def caesar(plaintext, shift):
alphabet_lower = string.ascii_lowercase
alphabet_upper = string.ascii_uppercase
alphabet = alphabet_lower + alphabet_upper
shifted_alphabet_lower = alphabet_lower[shift:] + alphabet_lower[:shift]
shifted_alphabet_upper = alphabet_upper[shift:] + alphabet_upper[:shift]
shifted_alphabet = shifted_alphabet_lower + shifted_alphabet_upper
table = string.maketrans(alphabet, shifted_alphabet)
return plaintext.translate(table)
사용 shift = 1
이렇게하면 z? – user357269
아니요, 대문자와 소문자로 사용합니다. –
이 코드는 문제를 해결하는 데 도움이 될 수 있지만 _why_ 및/또는 _how_는 질문에 대답하지 않습니다. 이러한 추가적인 컨텍스트를 제공하면 장기적인 가치가 크게 향상됩니다. 어떤 제한 사항 및 가정이 적용되는지를 포함하여 설명을 추가하기 위해 답을 [편집하십시오]. –