我在初学者编程课程中,我们的教师选择Python作为我们要使用的语言。他给了我们一个非常简单的任务,我将发布,以及我提出的代码,我也将发布。我觉得这个该死的白痴,因为我无法理解为什么这不起作用。我不断得到一个全局定义错误,如果我们提出一个问题,老师会看着我们,就像我们是宇宙的败类一样。
作业是:
设计模块化python程序,要求用户输入以千米为单位的距离,然后将该距离转换为英里。
程序应循环新输入,直到被运行程序的人告知停止。
提示:可以使用零(0)公里的输入来停止程序
转换公式如下:Miles =公里* 0.6214
至少需要三个模块:
- 输入
- 计算
- 打印
醇>
我提出的代码是:
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)
谁能告诉我我做错了什么?请记住我们刚刚开始,我不知道我在这些论坛中看到的许多高级编码技术。
答案 0 :(得分:6)
运行程序,我们收到的第一条错误消息是:
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
...这非常有用:它告诉您,未尝试在kilometers
函数中尝试在程序的第13行中使用的变量calculate()
。
这是因为名为scope的内容:您在kilometers
函数中定义的data()
变量仅存在于该函数中。
所以,你需要得到结果
data()
和calculate()
。要解决其中的第一个问题,您需要更改data()
以便它返回值:
def data():
print 'Enter Kilometers Please'
kilometers = input()
return kilometers
现在,在main()
函数中,您可以捕获它返回的值:
kilometers = data()
接下来,您需要更改calculate()
,使其接受kilometers
作为参数,方式与main()
接受ans
的方式相同,然后返回miles
:
def calculate(kilometers):
miles = kilometers * 0.6214
return miles
完成后,您可以更改main()
,以便将kilometers
传递到calculate()
,并从中捕获miles
:
miles = calculate(kilometers)
最后,更改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
:
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_input()
。这是dangerous,如果可能的话你应该避免它。不过,我会留给你研究如何解决这个问题。
答案 1 :(得分:-1)
简单。你在data()函数中声明或获得'km'的值,并且你试图从calculate()访问它。 calculate不知道什么是'km'..因为它是data()的本地范围。您应该定义公里并使用它。
kilometers=0.0
def date():
global kilometers
...
...
def calculate():
global kilometers
...