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")
3 réponses
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.
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"))
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
.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.