Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个Python程序会给我一个错误?_Python_Debugging_Python 2.7 - Fatal编程技术网

为什么这个Python程序会给我一个错误?

为什么这个Python程序会给我一个错误?,python,debugging,python-2.7,Python,Debugging,Python 2.7,我在一个初级编程课上,我们的老师选择了Python作为我们要使用的语言。他给了我们一个非常非常简单的任务,我会发布,还有我提出的代码,我也会发布。我觉得自己像个该死的白痴,因为我不明白这为什么不起作用。我不断得到一个全局定义错误,如果我们问一个问题,老师看着我们就像我们是宇宙中的渣滓一样 任务是: 设计一个模块化python程序,要求用户输入以公里为单位的距离,然后将该距离转换为英里 程序应循环输入新输入,直到运行程序的人员告知停止 提示:输入零(0)公里可用于停止程序 换算公式如下:英里=公里

我在一个初级编程课上,我们的老师选择了Python作为我们要使用的语言。他给了我们一个非常非常简单的任务,我会发布,还有我提出的代码,我也会发布。我觉得自己像个该死的白痴,因为我不明白这为什么不起作用。我不断得到一个全局定义错误,如果我们问一个问题,老师看着我们就像我们是宇宙中的渣滓一样

任务是:

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

程序应循环输入新输入,直到运行程序的人员告知停止

提示:输入零(0)公里可用于停止程序

换算公式如下:英里=公里*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)
    

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

    很简单。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感谢你深入解释并认真帮助解决问题新手。当我看到粗鲁的评论和对新程序员普遍持否定态度时,我感到失望。我敢肯定,当这些人受到那样的对待时,他们会感到沮丧。我很高兴看到这样的答案!