为什么这个Python程序给我报错了?

11 浏览
0 Comments

为什么这个Python程序给我报错了?

我在一门初级编程课上,我们的教师选择了Python作为我们要使用的编程语言。他给了我们一个非常简单的作业,我将把作业内容和我写的代码贴出来。我感觉自己像个白痴,因为我不明白为什么这个代码不起作用。我一直遇到全局定义错误,而且如果我们问问题,老师看着我们就像是宇宙中的渣滓一样。

作业内容:

设计一个模块化的Python程序,要求用户输入一个以公里为单位的距离,然后将该距离转换为英里。程序应该循环等待新的输入,直到被运行程序的人停止。提示:输入零(0)公里可以用来停止程序。转换公式如下:英里 = 公里 * 0.6214。最少需要三个模块:

1. 输入

2. 计算

3. 打印

我写的代码如下:

def main(ans):
    while ans=='yes':
        data()
        calculate()
        words()
def data():
    print '请输入公里数'    
    kilometers=input()
    return
def calculate():
    miles=kilometers*0.6214
    print miles
def words():
    print '英里数为',
    print '请输入另一个数字?'
ans='yes'
main(ans)

有人能告诉我我做错了什么吗?请记住我们刚刚开始学习,我不懂这些论坛上看到的许多先进的编码技巧。

0
0 Comments

这个Python程序出现错误的原因是在data()函数中声明或获取了'kilometers'的值,而你试图从calculate()函数中访问它。calculate()函数不知道'kilometers'是什么,因为它是data()函数的局部变量。你应该定义kilometers并在需要的地方使用它。

解决方法是在calculate()函数之前声明kilometers并将其设置为全局变量,以便在整个程序中都可以访问它。

kilometers = 0.0
def data():
    global kilometers
    # 其他代码...
def calculate():
    global kilometers
    # 其他代码...

然而,这是一个很糟糕的建议:初学者在不了解为什么这几乎总是一个坏主意的情况下不应该接触global关键字。在编写代码时,应该尽量避免使用全局变量,因为它们会增加程序的复杂性和维护难度。

0
0 Comments

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

当你运行程序时,第一个错误信息是这样的:

Traceback (most recent call last):

File "kilomiles.py", line 21, in

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

这个错误非常有帮助:它告诉你在程序的第13行,在calculate()函数中,你尝试使用的变量kilometers没有定义。

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

所以,你需要将结果从data()函数

1. 传递到calculate()函数中,

2. 从calculate()函数中返回。

为了解决第一个问题,你需要修改data()函数,使其返回值:

def data():

print 'Enter Kilometers Please'

kilometers = input()

return kilometers

现在,在你的main()函数中,你可以捕获它返回的值:

kilometers = data()

接下来,你需要修改calculate()函数,以便它像main()函数一样接受kilometers作为参数,并返回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()。这是危险的,如果可能的话,应该避免使用它。我会让你自己去解决如何修复这个问题。

对于你详细的解释和对新手的帮助,我给你加一分。看到对新程序员有粗鲁的评论和普遍的负面态度真是令人失望。当他们被这样对待时,我相信这些人会感到沮丧。我很高兴看到有这样的答案!

0