2015-12-02 2 views
0

У меня есть этот код, который я хочу, чтобы задать вопрос, как столько раз, сколько это необходимо, чтобы до тех пор, да или нет ответа даетсякод ошибки Python при использовании функции

def teacheraskno(): 
teacher = input("Are you a teacher? yes and no answers only! > ") 
if teacher == "no" or "yes".lower(): 
    if teacher == "no".lower(): 
     start() 
    if teacher == "yes".lower(): 
     teacheraskyes() 
else: 
    print ("Please enter yes and no answers only!") 
    teacheraskno() 

def teacheraskyes(): 
if teacher == "yes".lower(): 
    password = input("What is the Password? > ") 
if password =="123".lower(): 
    print ("ACCESS GRANTED!") 
    classname = input("what class would you like to view? 1, 2 or 3 > ") 

    f = open(classname + ".txt", 'r') #opens the class file 
    file_contents = f.read() 
    print (file_contents) 
    f.close() 


teacher = input("Are you a teacher? yes and no answers only! > ") 
if teacher == "no" or "yes".lower(): 
    if teacher == "no".lower(): 
     start() 
    if teacher == "yes".lower(): 
     teacheraskyes() 
    else: 
     print ("Please enter yes and no answers only!") 
     teacheraskno() 

Я получаю эту ошибку

==============================Math Revision Quiz================================ 
Are you a teacher? yes and no answers only! > bla 
Please enter yes and no answers only! 
Are you a teacher? yes and no answers only! > yes 
Traceback (most recent call last): 
    File "S:\My Documents\Ben Atia CA A453\Python Code\Python Code 1.py", line 142, in <module> 
    teacheraskno() 
    File "S:\My Documents\Ben Atia CA A453\Python Code\Python Code 1.py", line 118, in teacheraskno 
    teacheraskyes() 
    File "S:\My Documents\Ben Atia CA A453\Python Code\Python Code 1.py", line 125, in teacheraskyes 
    if password =="123".lower(): #if the password is correct it will let the teacher view the code 
UnboundLocalError: local variable 'password' referenced before assignment 
>>> 

Что означает эта ошибка и как ее исправить?
Пожалуйста, помогите мне решить эту проблему.

+1

Вы должны использовать 'teacher.lower()' вместо '' yes '.lower() 'или' "no" .lower() '. '' no "' и '' yes "' уже имеют строчные значения ... Также вы должны сравнить это: 'teacher.lower() ==" yes "или teacher.lower() ==" no "' –

+0

Пожалуйста не используйте '123' в качестве пароля и, пожалуйста, не жёстко его кодируйте! : -/ –

+0

Отформатируйте свой код и трассировку. –

ответ

2

Вы должны изменить эту строку

if teacher == "no" or "yes".lower(): 

Для

if teacher.lower() not in ("no", "yes"): 

В настоящее время написано, выражение не означает, что вы думаете, что он делает. Если добавить скобки для выразительности, ваше выражение на самом деле читается как

if (teacher == "no") or ("yes".lower()): 

Подвыражение "yes".lower() будет всегда выход True.

0

Трудно сказать наверняка, учитывая Boken отступы вашего сниппета, но здесь:

if teacher == "yes".lower(): 
    password = input("What is the Password? > ") 
if password =="123".lower(): 
    print ("ACCESS GRANTED!") 

вы только определить переменную password в первой if отрасли, но попробуйте прочитать его в обоих случаях. Так что если teacher не равно «да», password не определен.

Существует немало проблем с вашим кодом, но это выходит за рамки вашего вопроса.

0

Вместо .lower вы можете использовать str.casefold() до input(). Это сделает все, что пользователь вводит в нижний регистр. Мало того, что это проверка, но она позволяет вам писать весь ваш код в нижнем регистре. Например:

teacher = str.casefold(input("Are you a teacher?")) 

Это должно изменить что-либо пользователь вводит в нижний регистр и разрешения вашего кода может быть записан в нижнем регистре без функции .lower().

Смежные вопросы