我无法从一个已定义的函数到另一个函数获取变量。 例如,我希望用户从菜单中选择一个国家/地区,然后将该国家/地区保存在第一个功能的变量中。 之后,用户必须从第二个菜单中选择他们想要的包,然后告诉程序有多少人年龄在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
答案 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,所以它使代码难以阅读。但我认为这是你的问题。