无法在Python中分配全局变量

时间:2012-04-05 22:14:04

标签: python global-variables

我无法从一个已定义的函数到另一个函数获取变量。 例如,我希望用户从菜单中选择一个国家/地区,然后将该国家/地区保存在第一个功能的变量中。 之后,用户必须从第二个菜单中选择他们想要的包,然后告诉程序有多少人年龄在12岁以上,2岁以上和2岁。

一旦完成,我希望所有保存的信息都转到一个表格,例如,如果用户选择了西班牙和全食宿套餐,并且有2个12岁以上的人和1个2岁以上的人+我想要该程序去西班牙餐桌并加价。所有年龄段的价格都不同。

下面是我到目前为止的代码,我想知道是否有人可以帮助它。

def result():
    global spian
    global spianf
    total=spian*n+spianf
    print total

def total():
    global n
    global i
    result()

def age ():
    n=input("please select number of people age 12+")
    m=input("please select number of people age 2+ ")
    b=input("please select number of people age 2-")
    total()
    result()


def pack():
   print "1.Full Boaard"
   print "2.Half board"
   print "3.Beds only"
   print "4.Main menu"
   n=raw_input("please select you package ")
   if n=="1":
     age()
     return n;
   if n=="2":
    age()
   if n=="3":
    age()
   if n=="4":
    country()



def country ():
   print "1.Spain"
   print "2.Portugal"
   print "3.Italy"
   print "4.Turkey"
   print "5.Exit"
   i=raw_input("Please enter your choice of country ")
   if i=="1":
       pack()
       spain=1
   if i=="2":
      pack()
   if i=="3":
       pack()
   if i=="4":
       pack()
   if i=="5":
       exit

 country()
 spian=150
 spianf=50

2 个答案:

答案 0 :(得分:4)

如果你刚刚开始学习python,我强烈建议不要养成这样的习惯,即在所有函数中使用全局变量。

请花点时间从python文档中查看此页面:http://docs.python.org/tutorial/controlflow.html#defining-functions

例如,虽然您可以在技术上修复此功能中的问题:

def age ():
    global n,m,b
    n=input("please select number of people age 12+")
    m=input("please select number of people age 2+ ")
    b=input("please select number of people age 2-")

...你的函数返回一些东西会更有用

def age ():
    n=input("please select number of people age 12+")
    m=input("please select number of people age 2+ ")
    b=input("please select number of people age 2-")
    return n, m, b

# and call it like
n, m, b = age()

如果你有一个想要修改spian的功能,你可能会这样做:

def newSpian(spianVal):
    return spianVal * 100

# and call it like
newSpianValue = newSpian(spian)
# or overwrite the old one
spian = newSpian(spian)

这将使您的功能更易于重复使用,也更容易理解。当你为这样的一切使用全局变量时,很难知道变量在逻辑中的位置。您必须查看所有其他函数,以确定在此过程中可能已更改的内容,甚至创建其当前值。

我还建议您使用比a,b,c,d

更有用的变量名称

答案 1 :(得分:0)

您使用的是全局关键字错误。

您应该在里面使用您想要全局查看的功能。 例如:

i = 5
def f(x):
    global i = x+1
f(2)
print i

将打印     3

相比之下,你所做的更像是

global i = 5
def f(x):
    i = x+1
f(2)
print i

打印     5

另外,发布时的格式有点像screwey,所以它使代码难以阅读。但我认为这是你的问题。