0

私はPythonとプログラミング全般に不慣れで、単純なwhileループをいじっているときにこの問題に遭遇しました。ループは入力を受け取り、考えられる 2 つのパスワードを評価します。

    print('Enter password')
    passEntry = input()

    while passEntry !='juice' or 'juice2':
      print('Access Denied')
      passEntry = input()
      print(passEntry)

    print('Access Granted')

ジュースまたはジュース2を有効なものとして受け入れていないようです。

また、次のような 1 つのパスワードを受け入れるだけです。

    while passEntry != 'juice' :

次の場合は機能しません。

    while passEntry !='juice' :

正常に動作します。これらの問題の理由を見つけることができないようです (後者の 2 つの違いは = の後のスペースだけです)。どんな助けでも大歓迎です。

4

6 に答える 6

7

まず、Python のgetpassモジュールを使用して、移植可能なパスワードを取得する必要があります。例えば:

import getpass
passEntry = getpass.getpass("Enter password")

次に、whileループを保護するために作成したコード:

while passEntry != 'juice' or 'juice2':

Python インタープリターによってガード式を使用した while ループとして解釈されます

(passEntry != 'juice') or 'juice2'

passEntry「juice」が等しいかどうかに関係なく、「juice2」はブール値として解釈されると true と見なされるため、これは常に true です。

Python でメンバーシップをテストする最良の方法は、in演算子を使用することです。これは、リスト、セット、またはタプルなどのさまざまなデータ型に対して機能します。たとえば、リスト:

while passEntry not in ['juice', 'juice2']:
于 2012-12-28T05:53:52.497 に答える
3

あなたが使用することができます

while passEntry not in ['juice' ,'juice2']:
于 2012-12-28T05:49:19.773 に答える
1

どうですか:

while passEntry !='juice' and passEntry!= 'juice2':

raw_input()の代わりに使用しinput()ますか?

input()入力を Python コードであるかのように評価します。

于 2012-12-28T05:49:14.083 に答える
1

passEntry !='juice' or 'juice2'を意味し(pass != 'juice') or ('juice2')ます。 "juice2"は空でない文字列なので、常に true です。したがって、あなたの条件は常に真です。

やりたいpassEntry != 'juice' and passEntry != 'juice2'、もっと素敵にpassEntry not in ('juice', 'juice2')

于 2012-12-28T05:49:46.340 に答える
0

これは機能しますか?

while passEntry !='juice' and passEntry !='juice2':
于 2012-12-28T05:47:22.497 に答える
0

エラーは while ステートメントの書き方にあります。

while passEntry !='juice' or 'juice2':

Python インタープリターによって読み取られると、その行は常に true になります。また、代わりに:

passEntry = input()

使用する:

passEntry = raw_input()

(Python 3 を使用していない場合)

inputPython 2 の the は、入力を評価します。

これは適切なコードになります。

print('Enter password')
passEntry = raw_input()

while passEntry != 'juice' and passEntry != 'juice2':
    print('Access Denied')
    passEntry = raw_input()
    print(passEntry)

print('Access Granted')
于 2012-12-28T09:53:31.643 に答える