很抱歉在这个时候打扰你,但我真的很挣钱。我正在开发一个python项目,我有一组非常具体的指令要遵循。在主模块中使用本地命名常量来获取座位成本和部分座位限制,这些限制将传递给在以下几点下描述的模块和功能。这些是说明。
•尽管问题中有三个座位部分,但将创建一组基于传递参数用于任何给定部分的通用函数。这些函数将针对每个部分调用一次:A,B和C.这些函数的一般逻辑如下所述:
1.)包括输入函数(getTickets),它将给定部分的分节字母和席位限制作为参数。返回给定部分的票数。此功能只应返回有效数量的票证;验证函数ticketsValid应该从这个函数中调用。
2.)包括验证功能(ticketsValid),它将每个部分出售的票证和每个部分的座位限制作为传递的参数。返回一个布尔值,指示为给定部分销售的传递的票证是否在有效范围内。将在先前定义的getTickets函数内调用此验证函数。
3.)包括收入计算函数(calcIncome),它将售票和座位成本作为传递参数并返回为该部分生成的收入。
现在我的问题是,我无法理解为什么我的验证器工作不正常。我把它放在另一个函数中,但是当我运行代码时它只是一起跳过验证。 这是我的代码,任何帮助表示赞赏。再次感谢你帮助这么深夜! :)
def Main():
aPrice=20
bPrice=15
cPrice=10
alimit=100
blimit=500
climit=200
ticketSold=0
getTickets(alimit)
calcIncome(ticketSold,aPrice)
getTickets(blimit)
calcIncome(ticketSold,bPrice)
getTickets(alimit)
calcIncome(ticketSold,cPrice)
def getTickets(limit):
ticketSold =int(input("How many tickets were sold in section? "))
ticketsValid(ticketSold,limit)
return ticketSold
def ticketsValid(ticketSold,limit):
if (ticketSold>limit | ticketSold<0):
print ("ERROR: Section A needs to be a number between 0 and 300")
def calcIncome(ticketSold,price):
totalIncome= (price*ticketSold)
print ("The total income for the theater section is "+str(totalIncome))
Main()
答案 0 :(得分:1)
ticketSold>limit | ticketSold<0
将|
更改为or
,这样就可以了。您的calcIncome
得到ticketSold = 0
,而不是新计算的收入。这是因为您在函数中使用的具有相同名称的变量是本地的,在函数外部不可见。要修复它,请使用ticketSold = getTickets(alimit)
。一般来说,如果函数应该进行一些计算而不是使用全局变量,那么让函数返回一些东西是个好主意:
def calcIncome(ticketSold,price):
return price*ticketSold
totalIncome = calcIncome(ticketSold,cPrice)
print totalIncome
答案 1 :(得分:1)
让我们逐一审核您的要求。
在主模块中使用本地命名常量来获取席位成本和部分席位限制,这些限制将传递给以下几点所述的模块和功能。
所以有一个主模块,它有本地命名常量。这很容易。
def income():
SECTION_A = dict('name': 'A', 'seats': 100, 'price': 20)
SECTION_B = dict('name': 'B', 'seats': 500, 'price': 15)
SECTION_C = dict('name': 'C', 'seats': 200, 'price': 10)
每个常量都是一个有三个插槽的字典。
虽然问题中有三个座位部分,但是将创建一组基于传递的参数用于任何给定部分的通用函数。这些函数将针对每个部分调用一次:A,B和C.这些函数的一般逻辑如下所述:
1.)包括输入函数(
getTickets
),该函数将给定部分的分节字母和席位限制作为参数。返回给定部分的票数。此功能只应返回有效数量的票证;应该从此函数调用验证函数ticketsValid
。
该要求基本上规定如果ticketsValid
返回false,则函数不能返回。我想这意味着我们需要循环并再次询问。
def getTickets(section_letter, seat_limit):
while True:
print "Tickets sold for section %s (max %d):" % (section_letter, seat_limit)
reply = int(input())
if ticketsValid(reply, seat_limit):
return reply
else:
print "Sorry, try again."
如果输入无法强制转换为int
,但如果第一次分配可能是可接受的,则会失败。
2.。)包括验证功能(
ticketsValid
),它将每个部分出售的门票和每个部分的座位限制作为传递的参数。返回一个布尔值,指示为给定部分销售的传递的票证是否在有效范围内。将从先前定义的getTickets
函数中调用此验证函数。
如果我理解正确,&#34;有效范围&#34;意味着我们不得卖出超过座位限额或负数。
def ticketsValid(number, seat_limit):
if 0 <= number <= seat_limit:
return True
else:
return False
把它放在一个单独的函数中是没有意义的,恕我直言,虽然调用函数可能会因为这个问题而变得更简单。
3。)包括收入计算函数(
calcIncome
),它将售票和座位成本作为传递的参数,并返回为该部分生成的收入。
再一次,这是琐碎的愚蠢地放在一个单独的功能,但如果计算将来会改变(增加增值税!将一个百分比复制到失业基金!),它可能是好的只有一个地方。
def calcIncome(tickets_sold, seat_cost):
return tickets_sold*seat_cost
现在剩下的就是将这些部分连接在一起,形成一个有意义的整体。注意记住将每个函数的返回值赋给变量!
for section in [SECTION_A, SECTION_B, SECTION_C]:
tickets_sold = getTickets(section['name'], section['seats'])
...