0

我无法将变量从一个定义的函数传递到另一个。例如,我希望用户从菜单中选择一个国家,然后将该国家保存在第一个函数的变量中。之后,用户必须从第二个菜单中选择他们想要的套餐,然后告诉程序有多少 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
4

2 回答 2

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

于 2012-04-05T22:46:24.417 回答
0

您使用的 global 关键字错误。

您应该在要全局查看的函数中使用。例如:

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

此外,您发布时的格式有点混乱,因此它使代码难以阅读。但我认为这是你的问题。

于 2012-04-05T22:30:08.477 回答