Python:NameError:name';u';没有定义

Python:NameError:name';u';没有定义,python,function,undefined,nameerror,defined,Python,Function,Undefined,Nameerror,Defined,我正在用函数完成一个简单的类定义。我们必须找出哪个月的m功能contract\u v比contract\u更有利。 这是我写的代码: def contract_u(m): u=1000 for i in range (m): u=u+80 return u def contract_v(m): v=1000 for i in range (m): v=v*1.05 return v m=1 if u>v: m=m+1 else: prin

我正在用函数完成一个简单的类定义。我们必须找出哪个月的
m
功能
contract\u v
contract\u
更有利。 这是我写的代码:

def contract_u(m):
  u=1000
  for i in range (m):
    u=u+80
  return u

def contract_v(m):
  v=1000
  for i in range (m):
    v=v*1.05
  return v

m=1
if u>v:
  m=m+1
else:
  print(m)
然而,计算机说:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-20-8909d368129a> in <module>()
     12 
     13 m=1
---> 14 if u>v:
     15   m=m+1
     16 else:

NameError: name 'u' is not defined
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
12
13米=1
--->14如果u>v:
15米=米+1
16其他:
名称错误:未定义名称“u”
我不明白我必须修改什么,以及为什么代码不能正常运行。 如果你确实知道做错了什么,请指出这一点。
提前感谢。

您的变量是在函数中本地定义的,因此它们不存在于函数之外,因此您应该在if语句之前添加以下行:

u=contract_u(m)
v=contract_v(m)

这里您没有调用声明变量u和v的函数,因此请尝试如下操作:

def contract_u(m):
  u=1000
  for i in range (m):
    u=u+80
  return u

def contract_v(m):
  v=1000
  for i in range (m):
    v=v*1.05
  return v

m=1
u = contract_u(m)
v = contract_v(m)
if u>v:
  m=m+1
else:
  print(m)

您只能在变量位于范围内时引用它。下面是关于了解名称空间如何工作的更多信息。这是否回答了您的问题?在处理函数时,有一点很重要:函数中的变量名称和函数外部的变量名称可能不同。因此,您可以执行
foo=contract\u(m)
,然后与
if foo>v:
进行比较。调用函数与此无关
u
v
在函数范围内定义,将函数的返回值分配给
u
v
外部就是将这些值分配给函数范围外的名称