很抱歉在这个时候打扰你,但我真的在为一个节目而挣扎。我正在处理一个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()
发布于 2014-03-11 04:27:37
ticketSold>limit | ticketSold<0
将|
更改为or
,它将工作。calcIncome
得到的是ticketSold = 0
,而不是新计算的收入。这是因为在函数中使用的同名变量是本地变量,它在函数之外是不可见的。要修复它,请使用ticketSold = getTickets(alimit)
。一般来说,如果函数应该进行一些计算,而不是使用全局变量,那么最好让它们返回一些内容:
def calcIncome(ticketSold,价格):返回价格*ticketSold totalIncome = calcIncome(ticketSold,cPrice)打印totalIncome发布于 2014-03-11 21:10:53
让我们逐一回顾一下您的需求。
在主模块中使用本地命名常量,用于计算座位成本和将传递给以下各点描述的模块和函数的区段座位限制。
因此,有一个主模块,它有一个本地名为常量。这很简单。
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
函数中调用。
如果我正确理解,“有效范围”意味着我们的销售不得超过座位限制,或一个负数。
def ticketsValid(number, seat_limit):
if 0 <= number <= seat_limit:
return True
else:
return False
把它放在一个单独的函数IMHO中是没有意义的,尽管调用函数可能通过分解这个函数而变得更简单。
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'])
...
https://stackoverflow.com/questions/22316356
复制相似问题