0

プログラムに終了を要求すると、要求したように印刷されますが、オプションのメニューも継続的に表示されるという問題があります。

だから私はこれを得ています:

>>> 
(S)huffle a message.
(U)nshuffle a message.
(Q)uit program.
Choose a option to begin: q
Goodbye!
(S)huffle a message.
(U)nshuffle a message.
(Q)uit program.
Choose a option to continue:

「q」を選択した場合にこれを表示する場所:

>>> 
(S)huffle a message.
(U)nshuffle a message.
(Q)uit program.
Choose a option to begin: q
Goodbye!

ここに私の完全なコードがあります。メニューが再印刷される理由を説明してください。なぜなら、while ループを間違って作ったのでしょうか、それとも私のコードに何か問題がありますか?

def hw8():

    print('(S)huffle a message.')
    print('(U)nshuffle a message.')
    print('(Q)uit program.')

    x = input('Choose a option to begin: ')

    if x == 'Q' or x == 'q':
        print('Goodbye!')

    while x != 'q' or 'Q' :

        if x == 'S' or x == 's':
            y = input('Enter a message to shuffle: ')

            q1 = ''

            for i in y:
                if ord(i) in range(65,90) or ord(i) in range(97,122):
                    q = chr(ord(i) + 1)
                    q1 = q1 + q
                elif ord(i) == 90:
                    q = chr(ord(i) + 7)
                    q1 = q1 + q
                elif ord(i) == 122:
                    q = 'A'
                    q1 = q1 + q
                else:
                    q = i
                    q1 = q1 + q
            print(q1)



        if x == 'U' or x == 'u':
            f = input('Enter a message to unshuffle: ')

            t2 = ''

            for i in f:
                if ord(i) in range (66,91) or ord(i) in range(98,123):
                    t = chr(ord(i) - 1)
                    t2 = t2 + t
                elif ord(i) == 65:
                    t = 'z'
                    t2 = t2 + t
                elif ord(i) == 97:
                    t = 'Z'
                    t2 = t2 + t
                else:
                    t = i
                    t2 = t2 + t

            print(t2)

        print('(S)huffle a message.')
        print('(U)nshuffle a message.')
        print('(Q)uit program.')

        x = input('Choose a option to continue: ')


hw8()

ユーザーが「q」を選択してプログラムを終了するように要求した後ではなく、メッセージをシャッフルした後、またはメッセージのシャッフルを解除した後、および最初にメニューを表示するプログラムが必要です。


編集されたコード:

def hw8():

    print('(S)huffle a message.')
    print('(U)nshuffle a message.')
    print('(Q)uit program.')

    x = input('Choose a option to begin: ')

    while x != 'q' or x != 'Q' :

        if x == 'S' or x == 's':
            y = input('Enter a message to shuffle: ')

            q1 = ''

            for i in y:
                if ord(i) in range(65,90) or ord(i) in range(97,122):
                    q = chr(ord(i) + 1)
                    q1 = q1 + q
                elif ord(i) == 90:
                    q = chr(ord(i) + 7)
                    q1 = q1 + q
                elif ord(i) == 122:
                    q = 'A'
                    q1 = q1 + q
                else:
                    q = i
                    q1 = q1 + q
            print(q1)



        if x == 'U' or x == 'u':
            f = input('Enter a message to unshuffle: ')

            t2 = ''

            for i in f:
                if ord(i) in range (66,91) or ord(i) in range(98,123):
                    t = chr(ord(i) - 1)
                    t2 = t2 + t
                elif ord(i) == 65:
                    t = 'z'
                    t2 = t2 + t
                elif ord(i) == 97:
                    t = 'Z'
                    t2 = t2 + t
                else:
                    t = i
                    t2 = t2 + t

            print(t2)

        print('(S)huffle a message.')
        print('(U)nshuffle a message.')
        print('(Q)uit program.')

        x = input('Choose a option to continue: ')

        if x == 'Q' or x == 'q':
            print('Goodbye!')


hw8()

新しい出力:

>>> ================================ RESTART ================================
>>> 

(S)huffle a message.
(U)nshuffle a message.
(Q)uit program.
Choose a option to begin: s
Enter a message to shuffle: hello
ifmmp
(S)huffle a message.
(U)nshuffle a message.
(Q)uit program.
Choose a option to continue: q
Goodbye!
(S)huffle a message.
(U)nshuffle a message.
(Q)uit program.
Choose a option to continue: 
4

2 に答える 2

4

x != 'q' or 'Q'として扱われ(x != 'q') or 'Q'、'Q' は常に True です。

x not in 'qQ'または_ x.lower() != 'q'

于 2012-11-27T00:32:17.580 に答える
0

あなたの問題はこの行です:

while x != 'q' or 'Q' :

問題は、Qそれ自体が常に を返すTrueため、式は常に true になることです。次のように行を変更してみてください。

while x != 'q' and x != 'Q' :
于 2012-11-27T00:31:52.737 に答える