1

各文字を 2 つのアルファ位置、つまり'a' が 'c' になるようにインクリメントして、文字列を復号化したいと考えています。chrインクリメントに andを使用しordましたが、スペースや括弧などの文字列内の特殊文字をスキップする方法がわかりません。

from sys import stdout
from time import sleep

encodedString = 'g fmnc wms'

stringLength = len(encodedString)

for i in range(0, stringLength):
    if encodedString[i].isalpha():
        decodedString = chr(ord(encodedString[i]) + 2)
        stdout.write("\r%s" % decodedString)
        stdout.flush()
        sleep(0.1)
stdout.write("\n")
4

2 に答える 2

1

キックのために、これを行う別の方法を次に示します。

encodedString = 'g fmnc wms'

alphabet = 'abcdefghijklmnopqrstuvwxyz'
capalphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
decodedString = ""

for i in range(len(encodedString)):
    if encodedString[i] in alphabet:
        decodedString += alphabet[i+2]
    elif encodedString[i] in capalphabet:
        decodedString += alphabet[i+2]
    else:
        decodedString += encodedString[i]

print(decodedString)
于 2013-09-14T00:25:24.413 に答える
1

正規表現を使用してすべての文字をキャッチし、それらを置き換えるという、はるかに単純なコードになる別のアプローチをチェックアウトすることをお勧めします。このようなもの:

import re

encodedString = 'g fmnc wms'

def decodeLetter(match):
    letter = match.group(0)[0]
    if letter in 'YZyz':
        return chr(ord(letter) - 24)
    else:
        return chr(ord(letter) + 2)

print(re.sub('[a-zA-Z]', decodeLetter, encodedString))

お役に立てれば!

于 2013-09-13T23:57:31.770 に答える