1

こんにちは、私が抱えている問題は、映画館のチケットとセクションです。基本的に、このプログラムは、入力されたチケットを受け取り、総収入を生み出すことになっています。1 つの要件は、入力されたチケットの量がそのセクションの座席制限を超えた場合に実行される無効化機能です。プログラムは問題なく動作しますが、無効化が発生し、適切な数のチケットが入力されると、無効化関数を実行する原因となったチケットと、販売された新しい適切なチケット数が計算されます。助けてください。ありがとう!

    secA = 20
    secB = 15
    secC = 10
    def getTickets():

        global A
        A = int(input("Please enter the number of tickets sold in section A: "))

        global B
        B = int(input("Please enter the number of tickets sold in section B: "))

        global C
        C = int(input("Please enter the number of tickets sold in section C: "))

    def ticketsValid(A,B,C):
        while A > 300 or A < 0:
            print("ERROR: Section A has a limit of 300 seats")
            A = int(input("Please enter the number of tickets sold in section A: "))
        while B > 500 or B < 0:
            print("ERROR: Section B has a limit of 500 seats")
            B = int(input("Please enter the number of tickets sold in section B: "))
        while C > 200 or C < 0:
            print("ERROR: Section C has a limit of 200 seats")
            C = int(input("Please enter the number of tickets sold in section C: "))

    def calcIncome(A, B, C):
        incomeGenerated = A * secA + B * secB + C * secC
        print("The income generated is $%d" % (incomeGenerated))

    def main():
        getTickets()
        ticketsValid(A,B,C)
        calcIncome(A, B, C)

    main()
4

2 に答える 2

1

問題は、ticketsValidローカル変数のみを変更していることです。そのため、関数を終了すると、変更されたすべての値が失われ、グローバル スペースの値が再び使用されます。ABC

global A, B, C関数で行ったように再度呼び出すことでこれを修正できますgetTickets。または、より良い解決策は、関数が値を返すようにすることです。したがってgetTickets、 のタプルを返し、(A, B, C)そのticketsValidタプルを取得して、(変更された値を持つ) そのようなタプルを再び返し、calcIncomeそれを再び使用します。

たとえば、次のようにします。

def getTickets():
    A = int(input("Please enter the number of tickets sold in section A: "))
    B = int(input("Please enter the number of tickets sold in section B: "))
    C = int(input("Please enter the number of tickets sold in section C: "))
    return (A, B, C)

def ticketsValid(A, B, C):
    while A > 300 or A < 0:
        print("ERROR: Section A has a limit of 300 seats")
        A = int(input("Please enter the number of tickets sold in section A: "))
    while B > 500 or B < 0:
        print("ERROR: Section B has a limit of 500 seats")
        B = int(input("Please enter the number of tickets sold in section B: "))
    while C > 200 or C < 0:
        print("ERROR: Section C has a limit of 200 seats")
        C = int(input("Please enter the number of tickets sold in section C: "))
    return (A, B, C)

def calcIncome(A, B, C):
    incomeGenerated = A * secA + B * secB + C * secC
    print("The income generated is $%d" % (incomeGenerated))

def main():
    A, B, C = getTickets()
    A, B, C = ticketsValid(A, B, C)
    calcIncome(A, B, C)
于 2013-03-11T19:08:44.997 に答える
0

グローバル変数と同じように、関数ヘッダー def ticketValid(A,B,C): で同じ変数名を使用しました。したがって、 ticketValid で A、B、または C を上書きすると、グローバル変数ではなく、ローカルでのみ上書きされます。関数で globals()['A'] を使用する必要があります。

def ticketsValid(A,B,C):
    while A > 300 or A < 0:
        print("ERROR: Section A has a limit of 300 seats")
        globals()['A'] = int(input("Please enter the number of tickets sold in section A: "))
    while B > 500 or B < 0:
        print("ERROR: Section B has a limit of 500 seats")
        globals()['B'] = int(input("Please enter the number of tickets sold in section B: "))
    while C > 200 or C < 0:
        print("ERROR: Section C has a limit of 200 seats")
        globals()['C'] = int(input("Please enter the number of tickets sold in section C: "))
于 2013-03-11T19:09:19.530 に答える