2016-03-08 57 views
0

我的一个学校作业是创建一个程序,您可以输入最少的乘客人数,最大乘客人数和机票价格。随着乘客群增加10,票价降低50美分。最后,它应该显示用户输入的数字可以带来的最大利润,以及与最大利润相关的乘客数量和票价。这一切都有效,但是当您输入的数字会导致负利润时,我会收到运行时错误。我究竟做错了什么?如果利润低于0,我已经尝试做出if语句,但似乎并不奏效。这里是我为你们所看到的工作。一个正确的方向或建设性的批评将是一个很大的帮助。我该如何让这个程序显示负数的结果?

#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

“我做错了什么?”您不会告诉我们运行时错误,也不会告诉我们它发生了什么。 – glglgl

+0

如果我输入的数字只会导致一个负利润,它会显示“您的最大利润为0.00美元”,然后与此崩溃:Traceback(最近调用最后一次): 文件“/ Users/rooftopz/Documents/Python Assignments /游轮test.py“,行42,在 print(”您的最大利润票价是$“,格式(best_ticket,”5,.2f“)) NameError:名称'best_ticket'未定义 – finch7591

回答

1

您的错误可能是因为您输出的变量是在没有执行的地方定义的。

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

因此,每当if条件为False时,best_ticket永远不会被分配。

尝试在代码顶部添加best_ticket = 0。

ticketprice = abs(float(input("Enter the ticket price: "))) 
best_ticket = -1 #nonsense value that warns you whats happening. 
2

你的错误是告诉你问题

NameError: name 'best_ticket' is not defined

您在此块定义best_ticket不管这种说法的真实性

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

,您引用best_ticket下面

print ("Your max profit ticket price is $", format (best_ticket,"5,.2f")) 
3

这是因为发生条件profit > maxprofit从不计算在你的利润为负的情况亦如此,因为maxprofit设置为0在最顶端。这反过来意味着在这种情况下best_ticket永远不会被赋值,所以Python不能在以后打印出来。

您可避免此问题,或者由以前的程序best_ticket设置默认值:

best_ticket = 0 

,或者是附加在best_ticket设为您只打印出最好的门票价格条件:

# 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")) 

另外,仅供参考,maxpass变量也会发生同样的问题。