我应该使用if语句还是循环?

时间:2020-10-21 03:16:46

标签: python if-statement while-loop

是我,您友好的Python新手!

我正在研究此程序,并且试图弄清楚如果数字超过某个阈值或者用户输入的数字以外的其他数字来使该程序停止运行,然后再次尝试,该程序如何停止。

这是我到目前为止所拥有的:

def ticket_a_sales_calculation(section_a_ticket_purchased):
    section_a_sales = section_a_ticket_purchased * 20
    return section_a_sales

def ticket_b_sales_calculation(section_b_ticket_purchased):
    section_b_sales = section_b_ticket_purchased * 15
    return section_b_sales

def ticket_c_sales_calculation(section_c_ticket_purchased):
    section_c_sales = section_c_ticket_purchased * 10
    return section_c_sales

def total_sales_calculation(ticket_a_sale, ticket_b_sale, ticket_c_sale):
    total_sales = ticket_a_sale + ticket_b_sale + ticket_c_sale
    return total_sales

def sales_report(ticket_a_sales, ticket_b_sales, ticket_c_sales, sales_totals):
    print("Ticket A Sales: $" + format(ticket_a_sales, ",.2f"))
    print("Ticket B Sales: $" + format(ticket_b_sales, ",.2f"))
    print("Ticket C Sales: $" + format(ticket_c_sales, ",.2f"))
    print("Total Sales: $" + format(sales_totals, ",.2f"))

def main():
    ticket_a_purchased = int(input("Please enter the amount of tickets sold for section A: "))
    if ticket_a_purchased > 300:
        print("Number exceeds amount of available seats")

    ticket_b_purchased = int(input("Please enter the amount of tickets sold for section B: "))
    if ticket_b_purchased > 500:
        print("Number exceeds amount of available seats")

    ticket_c_purchased = int(input("Please enter the amount of tickets sold for section C: "))
    if ticket_c_purchased > 200:
        print("Number exceeds amount of available seats")

    ticket_a_sales = ticket_a_sales_calculation(ticket_a_purchased)
    ticket_b_sales = ticket_b_sales_calculation(ticket_b_purchased)
    ticket_c_sales = ticket_c_sales_calculation(ticket_c_purchased)
    total_sales = total_sales_calculation(ticket_a_sales,ticket_b_sales,ticket_c_sales)
    sales_report(ticket_a_sales, ticket_b_sales, ticket_c_sales, total_sales)

main()

main()中的if语句正在打印我想要的内容,但是我想要做的是让程序在某些条件下停止。我知道whilefor循环会有所帮助,但我不知道如何设置它。

我最后尝试的是:

    seats_a = True
    while True:
        if seats_a > 300:
            print("Number exceeds amount of available seats")
        elif seats_a < 300:
            continue

那根本不起作用。

这时我很茫然。有人能向正确的方向推我吗?我觉得if语句不是正确的方法。我觉得使用while循环会更好,并且可以为我提供所需的结果。

上帝,我希望这是有道理的。

谢谢大家!

3 个答案:

答案 0 :(得分:2)

此习语应在以下情况下起作用:

while True:
    ticket_a_input = input("Please enter the amount of tickets sold for section A: ")
    if not ticket_a_input.isdigit():
        print("Ticket amount must be a number")
        continue
    if int(ticket_a_input) > 300:
        print("Number exceeds amount of available seats")
        continue
    ticket_a_purchased = int(ticket_a_input)
    break

我们在这里所做的是使用while True无条件地无限循环。然后,根据用户输入的内容,

  • 如果用户输入的不是数字,则我们将显示一条错误消息,并使用continue返回到循环的开头
  • 否则,如果用户输入的数字大于300,则打印不同的错误消息并重新启动循环
  • 如果用户输入有效,但没有击中任何一个,则将ticket_a_purchasedbreak设置为循环外。

这种成语适用于大多数“条件输入”,其中输入可能是有效的,也可能不是有效的,并且您想一直询问直到有效,但是对于其他情况,它很少是最佳解决方案。只要有合理的可能,您都希望尝试一个while循环,其实际条件可以单独满足。如果这样做,则需要非常小心,以确保通过循环的每条可能路径都以一种或另一种方式被覆盖,否则您将发现自己处于牢不可破的循环中。

答案 1 :(得分:1)

您在正确的轨道上。 while循环绝对是正确的方法,毕竟,您希望在某些情况为真(尚未超过阈值并且用户尚未输入非法输入)的情况下执行某些操作

但是,您尝试了continue-这导致循环停止当前迭代并从循环的下一个迭代开始。那不是您想要的,您似乎想要break也会停止当前迭代,但随后在当前循环(或更普遍地说,当前块)之外继续执行程序。

此外,您将True分配给seats_a,但随后继续使用相同的变量来保存其名称,即数字。

答案 2 :(得分:0)

您需要recentFile.FullName,它将立即停止其余代码的执行,您可以选择break。您将能够检查所有条件,并使用elif,可以确保当至少一种座位类型不再可用时,循环将停止。在这种情况下,在座位仍然可用的情况下,您甚至不需要将breakelif结合使用。那是因为continue之后的内容将不会执行。此外,在您的if中,我将指出哪些座位不可用(a,b或c)

print

仅当至少一种类型的座位不再可用时,循环才会仅停止