为什么这个Python程序会给我一个错误?
我在一个初级编程课上,我们的老师选择了Python作为我们要使用的语言。他给了我们一个非常非常简单的任务,我会发布,还有我提出的代码,我也会发布。我觉得自己像个该死的白痴,因为我不明白这为什么不起作用。我不断得到一个全局定义错误,如果我们问一个问题,老师看着我们就像我们是宇宙中的渣滓一样 任务是: 设计一个模块化python程序,要求用户输入以公里为单位的距离,然后将该距离转换为英里 程序应循环输入新输入,直到运行程序的人员告知停止 提示:输入零(0)公里可用于停止程序 换算公式如下:英里=公里*0.6214 至少需要三个模块:为什么这个Python程序会给我一个错误?,python,debugging,python-2.7,Python,Debugging,Python 2.7,我在一个初级编程课上,我们的老师选择了Python作为我们要使用的语言。他给了我们一个非常非常简单的任务,我会发布,还有我提出的代码,我也会发布。我觉得自己像个该死的白痴,因为我不明白这为什么不起作用。我不断得到一个全局定义错误,如果我们问一个问题,老师看着我们就像我们是宇宙中的渣滓一样 任务是: 设计一个模块化python程序,要求用户输入以公里为单位的距离,然后将该距离转换为英里 程序应循环输入新输入,直到运行程序的人员告知停止 提示:输入零(0)公里可用于停止程序 换算公式如下:英里=公里
def main(ans):
while ans=='yes':
data()
calculate()
words()
def data():
print 'Enter Kilometers Please'
kilometers=input()
return
def calculate():
miles=kilometers*0.6214
print miles
def words():
print 'The number of miles is',
print 'Enter another number?'
ans='yes'
main(ans)
谁能告诉我我做错了什么?请记住,我们才刚刚起步,我不知道我在这些论坛上看到的许多高级编码技术。很简单。U在data()函数中声明或获取“km”的值,您正试图从calculate()访问它。计算不知道什么是“公里”。。因为它是data()的本地作用域。您应该定义公里数并使用它
kilometers=0.0
def date():
global kilometers
...
...
def calculate():
global kilometers
...
运行程序时,我们收到的第一条错误消息是:
Traceback (most recent call last):
File "kilomiles.py", line 21, in <module>
main(ans)
File "kilomiles.py", line 4, in main
calculate()
File "kilomiles.py", line 13, in calculate
miles=kilometers*0.6214
NameError: global name 'kilometers' is not defined
现在,在main()
函数中,您可以捕获它返回的值:
kilometers = data()
接下来,您需要更改calculate()
,以便它接受km
作为参数,其方式与main()
接受ans
,并返回miles
:
def calculate(kilometers):
miles = kilometers * 0.6214
return miles
完成后,您可以更改main()
,使其将km
传递到calculate()
,并从中捕获miles
:
miles = calculate(kilometers)
ans = words(miles)
最后,更改words()
,使其接受miles
并返回ans
:
def words(miles):
print 'The number of miles is', miles
print 'Enter another number?'
ans = input()
return ans
。。。再对main()
进行一次更改,使其将miles
传递到words()
,并从中捕获ans
:
miles = calculate(kilometers)
ans = words(miles)
因此,您的最终计划如下所示:
def main(ans):
while ans == 'yes':
kilometers = data()
miles = calculate(kilometers)
ans = words(miles)
def data():
print 'Enter Kilometers Please'
kilometers = input()
return kilometers
def calculate(kilometers):
miles = kilometers * 0.6214
return miles
def words(miles):
print 'The number of miles is', miles
print 'Enter another number?'
ans = raw_input()
return ans
ans = 'yes'
main(ans)
这个程序现在可以运行了,但如果它成为一种习惯,它确实会有一个问题回来咬你:你使用的是
input()
,而不是raw\u input()
。这是一个问题,如果可能的话,你应该避免。不过,我将让您自己去解决如何解决这个问题。阅读基本的Python教程。您在这里遗漏了几个关键概念。另外,你们的讲师所说的“模块”是指功能吗?是的。教员说模块和功能是相同的。我知道我错过了一些东西,我会照你说的去做。@user2081458听起来你的导师毫无用处,而且在Python中非常不同。这是一个非常糟糕的建议:初学者在知道为什么这几乎总是一个坏主意之前,不应该接触到全局
。+1感谢你深入解释并认真帮助解决问题新手。当我看到粗鲁的评论和对新程序员普遍持否定态度时,我感到失望。我敢肯定,当这些人受到那样的对待时,他们会感到沮丧。我很高兴看到这样的答案!