2016-09-12 3 views
0

Я не уверен, что я делаю неправильно. Я попытался определить «если ответ был 'Y' Затем premium_membership=true», но я продолжаю получать эту ошибку. Начало до тех пор, пока я запускаю код, а второй - мой код.Если утверждения с неопределенной переменной

What is your name? John Smith 
How many books are you purchasing today? 5 
Are you apart of our membership program? Enter Y for yes or N for No. N 
Would you like to join our membership program for $4.95? Enter Y for yes or N for no. N 
Thank you for your interest, and thanks for shopping with us! 

John Smith 
The customer is purchasing 5.0 books 
Traceback (most recent call last): 
    File , line 41, in <module> 
    if premium_member==True: 
    NameError: name 'premium_member' is not defined 
>>> 

#ask what customer's name is 
customer_name=input("What is your name?") 

#ask customer how many books they are purchasing 
#define answer as float so you can multiply by price later 
books_purchased=float(input("How many books are you purchasing today?")) 

#ask customer if they are a member 
membership=input("Are you apart of our membership program? Enter Y for yes or N for No.") 

#determine if and print if member or not 
if membership =='Y': 
    premium_member=True 
else: 
    join=input("Would you like to join our membership program for $4.95? Enter Y for yes or N for no.") 

#define join 
if join =='Y': 
    print("Thank you for joining our Membership Program!") 

else: 
    print("Thank you for your interest, and thanks for shopping with us!") 

#print name 
print("\n",customer_name) 

#print number of books purchased 
print("The customer is purchasing", books_purchased, "books") 

#determine if they customer is premium 
if premium_member==True: 
    print("Premium Member") 
else: 
    print("Regular Member")  

#determine if customer gets any free books 
if premium_member==True: 
    if book_purchased>9: 
     print("Congratulations you get two books for free!") 
     total_books=book_purchased+2 
    else: 
     if book_purchased >6 and book_purchased<=9: 
      print("Congratulations you get one book for free!") 
      total_books=books_purchased+1 
     else: 
      total_books=books_purchased 
else: 
    if books_purchased>12: 
      print("Congratulations you get two books for free!") 
      total_books=book_purchased+2 
    else: 
     if books_purchased >8 and books_purchased <=12: 
      print("Congratulations you get one book for free!") 
      total_books=book_purchased+1 
     else: 
      total_books=books_purchased 
+0

В следующий раз у вас есть такого рода проблемы, возьмите ошибку вы получите, и удалить VARIABLENAME и вставить его в Google, как это: «питон NameError: имя не определено», первые пять ссылок, правильно понял, что вы получите эту ошибку. Кроме того, вам нужно вернуться к основному руководству python об области вокруг операторов if, о том, как линия выполнения продвигается через программу python, и «что происходит, когда вы используете переменную без ее определения?» –

ответ

4

В этом разделе кода

if membership =='Y': 
    premium_member=True 
else: 
    join=input("Would you like to join our membership program for $4.95? Enter Y for yes or N for no.") 

вы присваиваете premium_member=True в том случае, membership равно 'Y', но в том случае, если это не очень (else филиал) вы вообще не присваиваете значения, то есть переменная будет неопределенной. Вы должны добавить строку premium_member=False в ветку else.

if membership =='Y': 
    premium_member=True 
else: 
    premium_member=False 
    join=input("Would you like to join our membership program for $4.95? Enter Y for yes or N for no.") 
+2

Хотя это устранит проблему, я считаю неправильной практикой определять переменную только в операторах 'if'. Лучшая практика заключается в том, чтобы определить его вне операторов 'if' и присвоить значение в инструкции' if'. –

+0

Я согласен с вами в этом, но советы о том, где инициализировать, сильно зависят от контекста. В этом случае, поскольку назначенное значение является логическим и соответствует точно ветке, я бы, вероятно, пошел с 'premium_member = membership == 'Y'', за которым следует' if not premium_member: join = ... ' –

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