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

Python 无法识别bdelay()因为它在全局范围内。

尝试这个:

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

你的问题在这里:

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

当你这样做时b = b + 1,你期望b文件顶部的变量增加 1,对吗?

你可能还没有学过这个,但是这个不起作用的原因是因为一个叫做scope的东西。

要修复它,您需要将delay函数更改为如下所示:

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

通过查看您的代码,我认为您还没有学会如何使用while循环吗?

您反复调用startinside of 的解决方案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 回答