Я нашел два способа сделать то же самое, и мне интересно, что лучше и почему.
Вход = вес почтового пакета
Выход = самый дешевый способ доставки и цена какстрока
Методы, приведенные ниже, принимают 1 аргумент "weight" и предназначены для сравнения цен "Ground", "Drone" и "Premium", а затем возвращают строку, которая дает самый дешевый способ доставки и цену.(Ранее в программе методы определялись для "ground_rate (weight)" и "drone_rate (weight)" ... prem_groud_rate - постоянное значение с плавающей запятой.)
Первый способ использует словарь:
def shipping_method_determiner(weight):
prices = {"Ground": ground_rate(weight), "Drone": drone_rate(weight), "Premium" : prem_ground_rate}
cheapest_method = (list(prices.keys())[list(prices.values()).index(sorted(prices.values())[0])])
return (("%s is the cheapest method.\n\n" % cheapest_method) + ("The total cost will be %.2f.\n" % sorted(prices.values())[0]))
Второй способ заканчивается списком кортежей:
def shipping_method_determiner(weight):
method_list = ["Ground", "Drone", "Premium"]
price_list = [ground_rate(weight), drone_rate(weight), prem_ground_rate]
min_price = min(price_list)
method_with_price = list(zip(method_list, price_list))
best_method = (method_with_price[price_list.index(min_price)][0])
return "%s is the cheapest method.\n\nThe total cost will be %.2f \n" % (best_method, min_price)
Первый способ использует только 4 строки, но его труднее читать.Второй способ легче читать, но почти в два раза больше строк.Всегда ли более питонично стремиться к удобочитаемости в меньшем количестве строк?Любые другие способы определить этот метод и получить тот же результат?Было бы лучше как-то использовать .format () вместо форматирования строк?
Спасибо всем вам, умные люди!