首页 > 解决方案 > 我怎样才能使 IF 语句更有效率?

问题描述

我创建了一个小程序,它接受用户输入“航班规格”并根据输入输出该航班的详细信息。但是,它只是一堆 if 语句,我想知道是否有任何有用的技术可以减少 if 语句的数量并使程序更高效。

代码:

import time

def main():

    AMS_DESTINATION = "Schiphol, Amsterdam"
    GLA_DESTINATION = "Glasgow, Scotland"
    AMS_PRICE = 150.00
    GLA_PRICE = 80.00

    # User input [LLL 0 00 L L]
    flightSpecification = str(input("Enter Flight Specification: "))
    flightDestination = flightSpecification[0:3]

    bagCount = int(flightSpecification[4])
    baggageCost = float((bagCount - 1) * 20)

    passengerAge = int(flightSpecification[6:8])

    standardMeal = 10.00  
    vegetarianMeal = 12.00
    mealType = str(flightSpecification[9])

    seatClass = str(flightSpecification[11])

    totalFlightCost = 0
    
    if flightDestination.lower() != 'ams' and flightDestination.lower() != 'gla':
        print("Please enter a valid flight specification! [LLL 0 00 L L]")
        time.sleep(2)
        main()

    if flightDestination.lower() == 'ams':
        print(f"Destination: {AMS_DESTINATION}")  
        print(f"Flight cost: £{AMS_PRICE}")
        totalFlightCost = 150

    elif flightDestination.lower() == 'gla':
        print(f"Destination: {GLA_DESTINATION}")
        print(f"Flight cost: £{GLA_PRICE}")
        totalFlightCost = 80

    print(f"Number of bags: {bagCount}")
    print(f"Baggage Cost: £{baggageCost}")

    if passengerAge > 15:
        print("Child: False")
        
    elif passengerAge <= 15:
        print("Child: True")
        totalFlightCost = totalFlightCost / 2
        standardMeal = standardMeal - 2.50
        vegetarianMeal = vegetarianMeal - 2.50
        
    elif passengerAge < 0:
        print("Age cannot be negative")
        main()

    if mealType == 'S' and seatClass != 'F':
        totalFlightCost = totalFlightCost + standardMeal
        print("Meal: Standard")
        print(f"Meal Cost: £{standardMeal}")
        
    elif mealType == 'V' and seatClass != 'F':
        totalFlightCost = totalFlightCost + vegetarianMeal
        print("Meal: Vegetarian")
        print(f"Meal Cost: £{vegetarianMeal}")

    elif mealType == 'N':
        print("Meal: None")
        print("Meal Cost: £0")

    # THIS COULD DEFINITELY BE DONE MORE EFFICIENTLY
    if seatClass == 'F':
        if mealType == 'S':
            totalFlightCost = totalFlightCost + standardMeal
            print("Meal: Standard")
            print(f"Meal Cost: FREE")
            
        elif mealType == 'V':
            totalFlightCost = totalFlightCost + vegetarianMeal
            print("Meal: Vegetarian")
            print(f"Meal Cost: £{vegetarianMeal}")
            
        print("Seating Class: First")
        totalFlightCost = totalFlightCost * 6

    elif seatClass == 'E':
        print("Seating Class: Economy")

    print(totalFlightCost)
        
        

main()

谢谢

标签: pythonperformance

解决方案


对于这样一个简单的程序,它根本不值得考虑效率。但是,展望未来,如果您要验证具有数十万或更多项目的一批数据,那么效率就会成为一个问题。

以下是需要考虑的几点:

# flightSpecification = str(input("Enter Flight Specification: "))
flightSpecification = input("Enter Flight Specification: ")

请注意,input()总是返回 a str,所以它str()周围是多余的。

# mealType = str(flightSpecification[9])
mealType = flightSpecification[9]

类似地,既然flightSpecification已经是 a str,那么 thestr()又是多余的。

#if flightDestination.lower() == 'ams':
flightDestinationLower = flightDestination.lower()
if flightDestinationLower == 'ams':

lower()由于您进行了类似的比较,因此执行一次而不是多次可能更有效。

flightDestinationLower = flightDestination.lower()
if flightDestinationLower == 'ams':
    print(f"Destination: {AMS_DESTINATION}")  
    print(f"Flight cost: £{AMS_PRICE}")
    totalFlightCost = 150

elif flightDestinationLower == 'gla':
    print(f"Destination: {GLA_DESTINATION}")
    print(f"Flight cost: £{GLA_PRICE}")
    totalFlightCost = 80
else:
    print("Please enter a valid flight specification! [LLL 0 00 L L]")
    time.sleep(2)
    #main()
    continue

重新排列 s 的顺序,使ifselse:无需进行比较。也永远不要在你打算使用迭代的地方使用递归。


推荐阅读