我的变量已定义,但python表示不是吗? [英] My variable is defined but python is saying it isn't?
问题描述
我总是收到一个错误消息,告诉我名称hourly_pay
没有定义,但是我在main
函数中定义了它.
我是个初学者,因为我刚刚开始上课,但对我来说似乎应该可以工作:
commission_pay_amount = .05
income_taxes = .25
Pay_per_hour = 7.50
def main():
display_message()
hourly_pay = float(input('Please enter amount of hours worked: '))
commission_pay = hourly_pay * commission_pay_amount
gross_pay = hourly_pay + commission_pay
witholding_amount = gross_pay * income_taxes
hourly_paying = Pay_per_hour * hourly_pay
net_pay = gross_pay - witholding_amount
display_results()
def display_message():
print('This program is used to calculate')
print('the hourly pay, commission amount,')
print('the gross pay, the withholding amount,')
print('and the net pay amount')
print()
def display_results():
print('The hourly pay is $', format(hourly_pay, ',.2f'))
print('The commission amount is $', format(commission_pay, ',.2f'))
print('The gross pay is $', format(gross_pay, ',.2f'))
print('The witholding amount is $', format(witholding_amount, ',.2f'))
print('The net pay is $', format(net_pay, ',.2f'))
main()
在python中(与JavaScript相反),默认情况下变量在本地范围内.这意味着变量只能在定义它们的函数内部访问.可以忽略此行为,但通常
正如您所看到的,即使在 , 您问题的最终解决方案是处理 官方Python教程在功能范围上也有几句话(强调我的意思): 更准确地说,函数中的所有变量分配都将值存储在本地符号表中.而变量引用首先在本地符号表中查找,然后在封闭函数的本地符号表中查找,然后在全局符号表中查找,最后在内置名称表中查找.因此,尽管可以引用全局变量,但不能直接在函数中为其分配值(除非在 I keep getting an error telling me that the name I'm a beginner as I've just started class but to me it looks like it should be working:
In python (in contrast to JavaScript), variables are locally scoped by default. This means that the variables are only accessible inside the function they are defined in. This behaviour can be overridden, but usually you do not want that. To illustrate the difference, take a look at this python transcript: As you can see, even though The ultimate solution to your problem is to either handle output in the The official Python tutorial also has a few words on function scopes (emphasis mine): More precisely, all variable assignments in a function store the value in the local symbol table; whereas variable references first look in the local symbol table, then in the local symbol tables of enclosing functions, then in the global symbol table, and finally in the table of built-in names. Thus, global variables cannot be directly assigned a value within a function (unless named in a
这篇关于我的变量已定义,但python表示不是吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!foo()
函数中将var1
分配给了def main():
display_message()
hourly_pay = float(input('Please enter amount of hours worked: '))
commission_pay = hourly_pay * commission_pay_amount
gross_pay = hourly_pay + commission_pay
witholding_amount = gross_pay * income_taxes
hourly_paying = Pay_per_hour * hourly_pay
net_pay = gross_pay - witholding_amount
display_results(hourly_pay, commission_pay, gross_pay,
withholding_amount, net_pay)
def display_message():
print('This program is used to calculate')
print('the hourly pay, commission amount,')
print('the gross pay, the withholding amount,')
print('and the net pay amount')
print()
def display_results(hourly_pay, commission_pay, gross_pay,
withholding_amount, net_pay):
print('The hourly pay is $', format(hourly_paying, ',.2f'))
print('The commission amount is $', format(commission_pay, ',.2f'))
print('The gross pay is $', format(gross_pay, ',.2f'))
print('The witholding amount is $', format(witholding_amount, ',.2f'))
print('The net pay is $', format(net_pay, ',.2f'))
var1
名称的值在全局范围内也不会改变.如果我们根本没有全局定义var1
,那么foo()
之外的两个print(var1)
调用将失败,并出现NameError,就像您的代码一样.main()
函数中的输出,或者将值传递给display_results()
函数(通常更喜欢后者,将逻辑和输出分开):def main():
display_message()
hourly_pay = float(input('Please enter amount of hours worked: '))
commission_pay = hourly_pay * commission_pay_amount
gross_pay = hourly_pay + commission_pay
witholding_amount = gross_pay * income_taxes
hourly_paying = Pay_per_hour * hourly_pay
net_pay = gross_pay - witholding_amount
display_results(hourly_pay, commission_pay, gross_pay,
withholding_amount, net_pay)
def display_message():
print('This program is used to calculate')
print('the hourly pay, commission amount,')
print('the gross pay, the withholding amount,')
print('and the net pay amount')
print()
def display_results(hourly_pay, commission_pay, gross_pay,
withholding_amount, net_pay):
print('The hourly pay is $', format(hourly_paying, ',.2f'))
print('The commission amount is $', format(commission_pay, ',.2f'))
print('The gross pay is $', format(gross_pay, ',.2f'))
print('The witholding amount is $', format(witholding_amount, ',.2f'))
print('The net pay is $', format(net_pay, ',.2f'))
global
语句中命名).hourly_pay
is not defined, but I have it defined inside the main
function. commission_pay_amount = .05
income_taxes = .25
Pay_per_hour = 7.50
def main():
display_message()
hourly_pay = float(input('Please enter amount of hours worked: '))
commission_pay = hourly_pay * commission_pay_amount
gross_pay = hourly_pay + commission_pay
witholding_amount = gross_pay * income_taxes
hourly_paying = Pay_per_hour * hourly_pay
net_pay = gross_pay - witholding_amount
display_results()
def display_message():
print('This program is used to calculate')
print('the hourly pay, commission amount,')
print('the gross pay, the withholding amount,')
print('and the net pay amount')
print()
def display_results():
print('The hourly pay is $', format(hourly_pay, ',.2f'))
print('The commission amount is $', format(commission_pay, ',.2f'))
print('The gross pay is $', format(gross_pay, ',.2f'))
print('The witholding amount is $', format(witholding_amount, ',.2f'))
print('The net pay is $', format(net_pay, ',.2f'))
main()
>>> var1 = "this is global"
>>> def foo():
... var1 = "this is local"
... print(var1)
...
>>> print(var1)
this is global
>>> foo()
this is local
>>> print(var1)
this is global
var1
is assigned to in the foo()
function, the value of the var1
name does not change in the global scope. If we had not defined var1
globally at all, the two print(var1)
calls outside foo()
would fail with a NameError, just like your code does.main()
function, or pass the values to the display_results()
function (the latter is generally preferred, keep logic and output separated):def main():
display_message()
hourly_pay = float(input('Please enter amount of hours worked: '))
commission_pay = hourly_pay * commission_pay_amount
gross_pay = hourly_pay + commission_pay
witholding_amount = gross_pay * income_taxes
hourly_paying = Pay_per_hour * hourly_pay
net_pay = gross_pay - witholding_amount
display_results(hourly_pay, commission_pay, gross_pay,
withholding_amount, net_pay)
def display_message():
print('This program is used to calculate')
print('the hourly pay, commission amount,')
print('the gross pay, the withholding amount,')
print('and the net pay amount')
print()
def display_results(hourly_pay, commission_pay, gross_pay,
withholding_amount, net_pay):
print('The hourly pay is $', format(hourly_paying, ',.2f'))
print('The commission amount is $', format(commission_pay, ',.2f'))
print('The gross pay is $', format(gross_pay, ',.2f'))
print('The witholding amount is $', format(witholding_amount, ',.2f'))
print('The net pay is $', format(net_pay, ',.2f'))
global
statement), although they may be referenced.