姓の各文字をアルファベットの連続する文字で置き換えるにはどうすればよいですか?私はマスキングツールとしてこのスクリプトが必要です。姓のため姓の各文字をアルファベットの連続する文字で置き換えます。
ロジック:(Bの変更、Cに対するBの変更、...、へのZの変化)
例:ジョン・ドウになるであろうジョンEPF
入力ファイル:names.txt
John yi
kary Strong
Joe Piazza
So man
姓の各文字をアルファベットの連続する文字で置き換えるにはどうすればよいですか?私はマスキングツールとしてこのスクリプトが必要です。姓のため姓の各文字をアルファベットの連続する文字で置き換えます。
ロジック:(Bの変更、Cに対するBの変更、...、への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)
、私は文字列の2番目の単語として最後の名前を定義し、もちろんこれは強い仮定であるが、上の向上しますこれは問題の主要な問題ではありません。
文字をシフトすることはリスト内で行われ、各文字は別々に処理され、最初にord
を使用してASCIIコードに変換されます。大文字のASCIIコードは65-90(A
- Z
)で、小文字のASCIIコードは97-122(a
- z
)です。したがって、ケースを分離するために条件ord(c) < 91
が使用されます。次に、ASCIIコードは0から25の範囲の値に変換され、シフトされます(この例では1ずつ増分されます)。% 26
のモジュロ演算を使用して、z
をa
に戻します。その結果の値は、ASCII ASCIIコードの適切な範囲に変換されます。
これはCaesar's cipherと呼ばれます。あなたはそれが少しだけでなく、大文字の文字を許可するように変更する必要がありますhttps://stackoverflow.com/a/8895517/6664393
:1でシフトする
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_が質問に答えているとは説明していません。この追加の文脈を提供することは、長期的な価値を大幅に改善することになる。どのような制限や仮定が適用されるかなど、あなたの答えを解説してください。 –