1

シーザー暗号では、大文字は大文字のままで、非文字は非文字/同じままである必要があります。私は小文字で作業できることを持っています。

ただし、大文字は小文字に変換され、別の文字になります。文字以外の文字も小文字に変換されます。大文字はシフトする必要がありますが、大文字のままです。非文字は非文字のままにしておく必要があります。

p = raw_input(("enter a word"))
n = input(("how many must it shift"))
a = 0
b = 0
c = 0
d = 0

for i in p:
    if i.isupper():
        a += 1
    elif i.islower():
        b += 1
    elif i.isdigit():
        c += 1
    else:
        d += 1
e = ""

for i in p:
    if i == "":
    e += i
else:
    integerValue = ord(i)
    integerValue-= 97
    integerValue += n
    integerValue %= 26
    integerValue += 97
    e += chr(integerValue)

    print e
4

1 に答える 1

2

を使用i.isalpha()して、現在の文字が文字かi.isupper()どうかを確認したり、現在の文字が大文字かどうかを確認したりできます。文字を変換するときは、文字を小文字にしてから大文字に戻す必要があります。これらの変更に加えて、入力の括弧が多すぎます。Python 2.7 を使用しているため、raw_input を使用しました。あなたの書式設定は、投稿されたコードがインデントエラーのために実行されず、行if i == ""がスペースの代わりに空の文字列をチェックします。ここで述べたことは、無関係なビットを切り取りながら、コードをあなたが持っていたものと同じように保つために私があなたのコードに対して行ったことです。

p = raw_input("enter a word")
n = int(raw_input("how many must it shift"))
e = ''
for i in p:
    if not i.isalpha():
        e+=i
    else:
        integerValue = ord(i.lower())
        integerValue-= 97
        integerValue += n
        integerValue %= 26
        integerValue += 97
        if i.isupper():
            e += chr(integerValue).upper()
        else:
            e += chr(integerValue)

print e
于 2015-10-01T17:08:29.523 に答える