Возникли проблемы с сортировкой (список кортежей) - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь сделать что-то вроде программы, похожей на магазин, из 5 предметов, и она запрашивает у вас название продукта и цену, я хочу организовать это по убыванию цены.

#initialise variables
product1 = []
product2 = []
product3 = []
product4 = []
product5 = []
products = []
totalCost = 0.0


#input products and prices funtions
def getInput1():
   product1.append(input("What is the product?"))
   product1.append(input("What is the price?"))

def getInput2():
   product2.append(input("What is the product?"))
   product2.append(input("What is the price?"))

def getInput3():
   product3.append(input("What is the product?"))
   product3.append(input("What is the price?"))

def getInput4():
   product4.append(input("What is the product?"))
   product4.append(input("What is the price?"))

def getInput5():
   product5.append(input("What is the product?"))
   product5.append(input("What is the price?"))


#ask user products and prices   
getInput1()
getInput2()
getInput3()
getInput4()
getInput5()

products.append([product1, product2, product3, product4, product5])
products.sort(key=lambda tup: tup[1], reverse = True)

print("List is in format Product Name | Price") 
print(products)     

это простопоказывает цены нормально и не сортирует (ps) я знаю, что это может быть аккуратнее, но я застрял на том, как

1 Ответ

0 голосов
/ 14 февраля 2019

Проблема в том, что products - это список, в который вы вставили другой список [product1, product2, product3, product4, product5].Затем вы сортируете этот внешний список (из одного элемента - внутреннего списка), который, конечно, остается прежним.

Вместо этого вы можете сделать products = [product1, product2, product3, product4, product5] вместо products.append(...), и все должно работать какВы намерены.


Для очистки, почему все эти отдельные функции?Просто напишите одну get_product функцию.

def get_product():
    productname = input("What is the product? ")
    productprice = input("What is the price? ")

    return (productname, productprice)

Затем соберите 5 из них:

products = []
for _ in range(5):  # this is an idiomatic way to run the code in the for loop 5 times
    product = get_product()
    products.append(product)

и сортируйте

products.sort(key=lambda t: t[1], reverse=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...