0

ある定義済み関数から別の定義済み関数への変数の取得に問題があります。たとえば、ユーザーがメニューから国を選択し、その国が最初の関数の変数に保存されるようにします。その後、ユーザーは 2 番目のメニューから希望するパッケージを選択し、プログラムに 12 歳以上、2 歳以上、2 歳以下の人数を指定する必要があります。

それが完了したら、保存されたすべての情報をテーブルに移動する必要があります。たとえば、ユーザーがスペインと 3 食付きのパッケージを選択し、12 歳以上の 2 人と 2 歳以上の 1 人がいる場合、プログラムに行きたいスペインのテーブルと価格を追加します。価格はすべての年齢で異なります。

以下は私がこれまでに得たコードです。誰かがそれを手伝ってくれるかどうか疑問に思っていました.

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 に答える