Python 带有未定义变量的If语句

Python 带有未定义变量的If语句,python,python-3.x,Python,Python 3.x,我不确定我做错了什么,我试图定义“如果答案是'Y',那么premium\u 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

我不确定我做错了什么,我试图定义“如果答案是
'Y'
,那么
premium\u 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
>>> 
你叫什么名字?约翰·史密斯
你今天要买多少本书?5.
你是我们会员计划的成员吗?输入Y表示是,或输入N表示否
您愿意以4.95美元加入我们的会员计划吗?输入Y表示是,或输入N表示否
感谢您的关注,感谢您与我们一起购物!
约翰·史密斯
客户正在购买5.0版书籍
回溯(最近一次呼叫最后一次):
文件,第41行,在
如果premium_member==True:
NameError:未定义名称“premium_成员”
>>> 

#询问客户的姓名
客户名称=输入(“您的名字是什么?”)
#询问客户他们正在购买多少本书
#将答案定义为float,以便以后可以乘以价格
books\u purchased=float(输入(“您今天购买了多少本书?”)
#询问客户是否为会员
会员资格=输入(“您是我们会员计划的成员吗?输入Y表示是,输入N表示否”)
#确定是否为成员,并打印是否为成员
如果成员资格=='Y':
高级成员=真
其他:
join=input(“您想以4.95美元的价格加入我们的会员计划吗?输入Y表示是,输入N表示否”)
#定义联接
如果join='Y':
打印(“感谢您加入我们的会员计划!”)
其他:
打印(“感谢您的兴趣,感谢您与我们一起购物!”)
#印刷品名称
打印(“\n”,客户名称)
#打印购买的图书数量
打印(“客户正在购买”,已购买的书籍,“书籍”)
#确定他们是否是优质客户
如果premium_member==True:
打印(“高级会员”)
其他:
打印(“正式会员”)
#确定客户是否获得任何免费书籍
如果premium_member==True:
如果购买的图书>9:
打印(“恭喜你免费得到两本书!”)
书籍总数=购买的书籍+2
其他:
如果购买的图书超过6本,而购买的图书超过12本:
打印(“恭喜你免费得到两本书!”)
书籍总数=购买的书籍+2
其他:

如果在本部分代码中购买的图书>8且购买的图书

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.")
如果
成员资格
等于
'Y'
,则分配
premium\u member=True
,但如果它不是(
else
分支),则根本不分配值,这意味着变量将未定义。您应该将行
premium\u 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.")

在这段代码中

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.")
如果
成员资格
等于
'Y'
,则分配
premium\u member=True
,但如果它不是(
else
分支),则根本不分配值,这意味着变量将未定义。您应该将行
premium\u 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.")

虽然这样可以解决问题,但我认为仅在
if
语句中定义变量是一种不好的做法。更好的做法是在
if
语句之外定义它,并在
if
语句中指定一个值。我同意您的看法,但关于在何处初始化的建议在很大程度上取决于上下文。在这种情况下,由于分配的值是布尔值,并且与分支完全对应,我可能会使用
premium\u member=membership='Y'
,然后是
if not premium\u member:join=…
,虽然这样可以解决问题,但我认为仅在
if
语句中定义变量是一种不好的做法。更好的做法是在
if
语句之外定义它,并在
if
语句中指定一个值。我同意您的看法,但关于在何处初始化的建议在很大程度上取决于上下文。在这种情况下,由于分配的值是布尔值,并且与分支完全对应,我可能会选择
premium\u member=membership='Y'
,然后是
如果不是premium\u member:join=…
,下次遇到这种问题时,取下得到的错误,删除variablename并将其插入google,像这样:“PythonNameError:name未定义”,正确理解的前五个链接将告诉您为什么会出现此错误。此外,您还需要重温核心python教程中的scope-Abround if语句,python程序的执行过程,以及“当您使用变量而不定义它时会发生什么?”下一次遇到此类问题时,请接受您遇到的错误,删除variablename并将其插入google,如下所示:“python NameError:name is not defined”(正确理解的前五个链接)将告诉您为什么会出现此错误。此外,您还需要重新阅读关于if语句的核心python教程,了解python程序的执行过程,以及“当您使用变量而不定义变量时会发生什么?”