首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >函数使用布尔输入,而不打印预期结果。

函数使用布尔输入,而不打印预期结果。
EN

Stack Overflow用户
提问于 2014-03-11 04:16:13
回答 2查看 121关注 0票数 0

很抱歉在这个时候打扰你,但我真的在为一个节目而挣扎。我正在处理一个python项目,我有一套非常具体的指令要遵循。在主模块中使用本地命名常量,用于计算座位成本和将传递给以下各点描述的模块和函数的区段座位限制。这是说明。

虽然问题中有三个座位部分,但将根据所通过的参数为任何一节创建一套通用函数。这些函数将对每个部分调用一次: A、B和C。这些函数的一般逻辑描述如下:

(1)包含输入函数(getTickets),该函数以给定区段的节号和座位限制为参数。返回给定区段的票数。此函数只应返回有效数量的票证;应该从该函数调用验证函数ticketsValid。

(2)包含验证函数(ticketsValid),它将每个区段售出的票和每个区段的座位限制作为传递参数。返回一个布尔值,指示为给定区段出售的传递的票证是否在有效范围内。这个验证函数将从先前定义的getTickets函数中调用。

(3)包括收入计算函数(calcIncome),该函数以售票和座位成本为传递参数,并返回该部分产生的收入。

现在我的问题是,我不明白为什么我的验证器不能正常工作。我把它放在另一个函数中,但是当我运行代码时,它跳过了所有的验证。这是我的代码,任何帮助都是非常感谢的。再次感谢你这么晚的帮助!)

代码语言:javascript
代码运行次数:0
运行
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-11 04:27:37

  1. 这里:ticketSold>limit | ticketSold<0|更改为or,它将工作。
  2. 你的calcIncome得到的是ticketSold = 0,而不是新计算的收入。这是因为在函数中使用的同名变量是本地变量,它在函数之外是不可见的。要修复它,请使用ticketSold = getTickets(alimit)。一般来说,如果函数应该进行一些计算,而不是使用全局变量,那么最好让它们返回一些内容: def calcIncome(ticketSold,价格):返回价格*ticketSold totalIncome = calcIncome(ticketSold,cPrice)打印totalIncome
票数 1
EN

Stack Overflow用户

发布于 2014-03-11 21:10:53

让我们逐一回顾一下您的需求。

在主模块中使用本地命名常量,用于计算座位成本和将传递给以下各点描述的模块和函数的区段座位限制。

因此,有一个主模块,它有一个本地名为常量。这很简单。

代码语言:javascript
代码运行次数:0
运行
复制
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,则函数不得返回。我想这意味着我们需要循环并再次询问,如果不是。

代码语言:javascript
代码运行次数:0
运行
复制
    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函数中调用。

如果我正确理解,“有效范围”意味着我们的销售不得超过座位限制,或一个负数。

代码语言:javascript
代码运行次数:0
运行
复制
    def ticketsValid(number, seat_limit):
        if 0 <= number <= seat_limit:
            return True
        else:
            return False

把它放在一个单独的函数IMHO中是没有意义的,尽管调用函数可能通过分解这个函数而变得更简单。

3.)包括收入计算函数(calcIncome),它将门票销售和座位成本作为传递参数,并返回为该区段生成的收入。

再一次,这是如此琐碎,以致于愚蠢地加入一个单独的函数,但如果计算在未来会改变(加增值税!(将百分比复制至失业基金!)把它放在一个地方可能更好。

代码语言:javascript
代码运行次数:0
运行
复制
    def calcIncome(tickets_sold, seat_cost):
        return tickets_sold*seat_cost

现在留给你们的是把这些部分连接到一个有意义的整体上。请记住将每个函数的返回值赋给一个变量!

代码语言:javascript
代码运行次数:0
运行
复制
    for section in [SECTION_A, SECTION_B, SECTION_C]:
        tickets_sold = getTickets(section['name'], section['seats'])
        ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22316356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档