运行你的程序,我们得到的第一条错误信息是这样的:
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()
函数中没有定义。
那是因为一个叫做作用域的东西:kilometers
你在你的data()
函数中定义的变量只存在于那个函数中。
所以,你需要得到结果
- 出
data()
, 和
- 进入
calculate()
.
要解决第一个问题,您需要进行更改data()
以使其返回值:
def data():
print 'Enter Kilometers Please'
kilometers = input()
return kilometers
现在,在您的main()
函数中,您可以捕获它返回的值:
kilometers = data()
接下来,您需要进行更改calculate()
,使其kilometers
以与 accept 相同的方式作为参数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()
. 那很危险,如果可能的话,你应该避免它。不过,我会把它留给你来解决这个问题。