2

我正在上初学者编程课,我们的讲师选择了 Python 作为我们要使用的语言。他给了我们一个非常非常简单的任务,我将发布,以及我想出的代码,我也会发布。我觉得自己像个该死的白痴,因为我不明白为什么这不起作用。我不断收到全局定义错误,如果我们提出问题,老师就会把我们视为宇宙的渣滓。

任务是:

设计一个模块化的 Python 程序,要求用户以公里为单位输入距离,然后将该距离转换为英里。

程序应该循环寻找新的输入,直到运行程序的人告诉它停止。

提示:可以使用零 (0) 公里的输入来停止程序

换算公式如下:英里 = 公里 * 0.6214

至少需要三个模块:

  1. 输入
  2. 计算
  3. 打印

我想出的代码是:

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)

谁能告诉我我做错了什么?请记住,我们才刚刚开始,我不知道我在这些论坛中看到的许多高级编码技术。

4

2 回答 2

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()函数中没有定义。

那是因为一个叫做作用域的东西:kilometers你在你的data()函数中定义的变量只存在于那个函数中。

所以,你需要得到结果

  1. data(), 和
  2. 进入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(). 那很危险,如果可能的话,你应该避免它。不过,我会把它留给你来解决这个问题。

于 2013-02-18T04:56:34.173 回答
-1

这很简单。U 在 data() 函数中声明或获取“公里”的值,并且您正尝试从 calculate() 访问它。计算不知道什么是“公里”..因为它是数据()的本地范围。您应该定义公里并使用它。

kilometers=0.0

def date():
   global kilometers
   ...
   ...
def calculate():
   global kilometers
   ...
于 2013-02-18T04:41:50.040 回答