L'une de mes missions scolaires est de créer un programme où vous pouvez entrer un nombre minimum de passagers, un nombre maximum de passagers et le prix d'un billet. À mesure que les groupes de passagers augmentent de 10, le prix du billet baisse de 50 cents. À la fin, il est censé montrer le profit maximum que vous pouvez faire avec les chiffres saisis par l'utilisateur, ainsi que le nombre de passagers et le prix du billet associé au profit maximum. Tout cela fonctionne, mais lorsque vous entrez des chiffres qui génèrent un bénéfice négatif, j'obtiens une erreur d'exécution. Qu'est-ce que je fais mal? J'ai essayé de faire une déclaration if si le profit descend en dessous de 0, mais cela ne semble pas fonctionner. voici mon travail à voir. Une piste dans la bonne direction ou une critique constructive serait d'une grande aide.

    #first variables
passengers = 1
maxcapacity = 500
maxprofit = 0
ticketprice = 0
fixedcost = 2500

#inputs and outputs
again = 'y'

while (again == 'y'):
    minpassengers = abs(int(input("Enter minimum number of passengers: ")))
    maxpassengers = abs(int(input("Enter maximum number of passengers: ")))
    ticketprice = abs(float(input("Enter the ticket price: ")))

    if (minpassengers < passengers):
        minpassengers = passengers
        print ("You need at least 1 passenger. Setting minimum passengers to 1.")

    if (maxpassengers > maxcapacity):
        maxpassengers = maxcapacity
        print ("You have exceeded the max capacity. Setting max passengers to 500.")

    print ("Passenger Run from", minpassengers, "to", maxpassengers, "with an initital ticket price of $",format (ticketprice, "7,.2f"), "with a fixed cost of $2500.00\n"
           "Discount per ticket of $0.50 for each group of 10 above the starting count of", minpassengers, "passengers")

    for n in range (minpassengers, maxpassengers + 10, 10):
        ticketcost = ticketprice - (((n - minpassengers)/10) * .5)
        gross = n * ticketcost
        profit = (n * ticketcost) - fixedcost 

        print ("Number of \nPassengers", "\t Ticket Price \t Gross \t\t Fixed Cost \t Profit")
        print ("  ", n, "\t\t$", format (ticketcost, "7,.2f"), "\t$", format (gross, "5,.2f"), "\t$", format(fixedcost, "5,.2f"), "\t$", format (profit, "5,.2f"))

        if (profit > maxprofit):
            maxprofit = profit
            maxpass = n
            best_ticket = ticketcost


    print ("Your max profit is $", format (maxprofit, "5,.2f"))
    print ("Your max profit ticket price is $", format (best_ticket,"5,.2f"))
    print ("Your max profit number of passengers is", maxpass)
    again = input ("Run this again? (Y or N): ")
    again = again.lower()
    print ("\n")
0
finch7591 8 mars 2016 à 22:50

3 réponses

Meilleure réponse

Votre erreur est probablement due au fait que la variable que vous générez est définie à un endroit qui n'est pas exécuté.

    if (profit > maxprofit):
        maxprofit = profit
        maxpass = n
        best_ticket = ticketcost

Ainsi, chaque fois que la condition if est False, best_ticket n'est jamais attribué.

Essayez d'ajouter best_ticket = 0 en haut de votre code.

ticketprice = abs(float(input("Enter the ticket price: ")))
best_ticket = -1 #nonsense value that warns you whats happening.
1
JL Peyret 8 mars 2016 à 20:02

Votre erreur vous indique le problème

NameError: name 'best_ticket' is not defined

Vous définissez best_ticket dans ce bloc

    if (profit > maxprofit):
        maxprofit = profit
        maxpass = n
        best_ticket = ticketcost

Quelle que soit la vérité de cette déclaration, vous faites référence à best_ticket ci-dessous

print ("Your max profit ticket price is $", format (best_ticket,"5,.2f"))
2
munk 8 mars 2016 à 20:00

Cela se produit car la condition profit > maxprofit n'est jamais évaluée à True dans la situation où votre profit est négatif, car maxprofit est défini sur 0 en haut. Cela signifie à son tour que best_ticket ne reçoit jamais de valeur dans ce cas, et donc Python ne peut pas l'imprimer plus tard.

Vous pouvez éviter ce problème en définissant une valeur par défaut pour best_ticket plus tôt dans le programme:

best_ticket = 0

Ou en ajoutant une condition selon laquelle vous n'imprimez un meilleur prix de billet que lorsque best_ticket est défini:

# Earlier in the program.
best_ticket = None

if best_ticket is not None:
    print("Your max profit ticket price is $", format(best_ticket,"5,.2f"))

En outre, pour info, le même problème se produira pour la variable maxpass.

3
Apoc 8 mars 2016 à 20:08