Поиск по списку автомобителей

необходимо сделать поиск по списку автомобилей. Чтобы он находил как совпадение большой и маленькой буквы.

Audi A4,audi A5,AUDI a6 A7,BMW X5,VOLVO x60, audi a5

Тоесть из этого списка от должен найти все машины марки Ауди и выписать их. Сделала такой код, но он не работает, где ошибка?

def search_by_make(all_cars: str) -> list:
 cars = all_cars.split(',')
 make = []
 for car in cars:
    if car.lower() in all_cars.lower():
        return make
    elif car.upper() in all_cars.upper():
        return make

верхняя часть спасибо, решена. По её принципу была сделана другая часть, но надо найти полное совпадение в данном коде:

def search_by_models(all_cars: str, the_models: str) -> list:
cars = all_cars.split(',')
models = []
for model in cars:
    if the_models.lower() in model.lower():
        models.append(model)
return models


print(search_by_models("Audi A4,Audi a4 2021,Audi A40", "A4"))

Код находит даже по частичному совпадению, что является ошибкой.


Ответы (1 шт):

Автор решения: Алексей Р

Из основных ошибок:

  1. В функцию не передается параметр, что именно искать (Audi) и не ищется.
  2. Внутри цикла ищутся все марки автомобилей в начальном тексте all_cars
  3. Не пополняется список make
  4. Осуществляется выход из функции после первого же совпадения, всегда возвращая пустой список make (см. п.2)

Остальные ошибки можно найти сравнив код:

def search_by_make(all_cars: str, the_car: str) -> list:
    cars = all_cars.split(',')
    make = []
    for car in cars:
        if the_car.lower() in car.lower():
            make.append(car) # пополняем список
    return make

all_cars = 'Audi A4,audi A5,AUDI a6 A7,BMW X5,VOLVO x60, audi a5'
print(search_by_make(all_cars, 'AuDi'))
['Audi A4', 'audi A5', 'AUDI a6 A7', ' audi a5']

Можно написать код короче c тем же результатом, например:

all_cars = 'Audi A4,audi A5,AUDI a6 A7,BMW X5,VOLVO x60, audi a5'
print(list(filter(lambda x: 'audi' in x.lower(), all_cars.split(','))))
→ Ссылка