1

私は非常に基本的な暗号化プログラムを作成しました。そのための復号化アルゴリズムを作成しているときに、ループでいくつかの問題に遭遇しました。

from re import *

cipher = open('cipher.txt')
ciphertext = cipher.read()
keyfile = open('key.txt')
key = keyfile.read()
decoded = []
chardec = ''
inval = 1

print("Decoder for encrypt1.py")
while inval == 1:
    useManKey = input("Use a manual key? Y or N\n> ")
    if useManKey == 'Y' or 'y':
        key = input("Please enter the key you wish to use to decrypt\n> ")
        inval = 0
    elif useManKey == 'N' or 'n':
        inval = 0
        print("OK, decrypting")
    else:
        print("That wasn't a valid option/nPlease re-enter")

これを実行し、useManKey を N または n として宣言すると、Y または y として宣言したかのように、ループの if 部分が実行されるようです。私はおそらくここでばかげていますが、どんな助けでも大歓迎です。

4

2 に答える 2

10

useManKey == 'Y' or 'y'あなたが思うように機能しません。あなたが欲しいのはですuseManKey in ('Y', 'y')。最初に を評価useManKey == 'Y'し、そのチェックが失敗した場合は、文字列'y'の真偽をテストします。空でない文字列は常に true であるため、ifステートメントは常に と評価されTrueます。コメントで指摘されているように、必要に応じてupper()orlower()を使用して、最初に入力を固定ケースに変換することもできます。

于 2012-12-07T13:11:51.207 に答える
2
useManKey == 'Y' or 'y'

値が 'Y' か 'y'かを実際にはチェックしuseManKeyません。何をする必要があるかについては、sr2222 の回答を使用してください。すなわち。

useManKey in ('Y', 'y')

前の式は次のように評価されます

(useManKey == 'Y') or 'y'

「y」の値がuseManKeyFalsy でない (None でない) かどうかに関係なく、常に True であり、これらの「or」は常に True と評価されます。

于 2012-12-07T13:17:24.617 に答える