1

そこで、学校で先生から、アクセスを許可するためにパスワードが必要なプログラムを作るように言われました。私はこれを作成しましたが、これまでのところループカウントについて持っているものをループするたびに増加するループカウントを追加して改善したいと思いますが、機能しません。

import time
b=0
a='apple'

def start():
    print("enter password")
    c=input("->  ")
    if c==a:
        grant()
    else:
        delay()

def grant():
    end

def delay():
    b=b+1
    time.sleep(b)
    start()

start()
4

2 に答える 2

3

あなたの問題はここにあります:

def delay():
    b=b+1
    time.sleep(b)
    start()

を実行すると、ファイルの先頭にある変数が 1 増加するb = b + 1ことが期待されますよね?b

あなたはおそらくこれをまだ学んでいないでしょうが、これが機能しない理由はscopeと呼ばれるもののためです。

delayこれを修正するには、関数を次のように変更する必要があります。

def delay():
    global b
    b=b+1
    time.sleep(b)
    start()

whileあなたのコードを見て、ループの使い方をまだ学んでいないと思いますか?

start内部で繰り返し呼び出すというソリューションは、delay実際には非常に巧妙です。ただし、whileループを使用する場合は、プログラムを書き直して、何をしようとしているのかが少し明確で明確になるようにすることができます。

import time

password = 'apple'

def start():
    counter = 0
    user_guess = ''

    while user_guess != password:
        print("enter password")
        user_guess = input("->  ")
        if user_guess != password:
            counter += + 1          # Same thing as doing `counter = counter + 1`
            time.sleep(counter)

    grant()

def grant():
    print "Access granted!"

start()
于 2013-09-30T18:49:24.247 に答える
3

グローバル スコープ内にあるため、 Python はbin を認識しません。delay()

これを試して:

def delay():
    global b
    b=b+1
    time.sleep(b)
    start()
于 2013-09-30T18:48:40.937 に答える