@lambardi

Купить n билетов с местами рядом (покупать билеты с наименьшими номерами мест)?

Здравствуйте! Подскажите пожалуйста.
Такая задача: купить n билетов с местами рядом (покупать билеты с наименьшими номерами мест).
Есть список:
Ticket = namedtuple('Ticket', ['idx', 'row', 'place', 'uuid'])
tickets = [
    Ticket(0, 1, 5, uuid.uuid4()),
    Ticket(1, 1, 11, uuid.uuid4()),
    Ticket(2, 1, 25, uuid.uuid4()),
    Ticket(3, 1, 11, uuid.uuid4()),
    Ticket(4, 1, 10, uuid.uuid4()),
    Ticket(5, 2, 8, uuid.uuid4()),
    Ticket(6, 2, 7, uuid.uuid4()),
    Ticket(7, 2, 6, uuid.uuid4()),
    Ticket(8, 2, 2, uuid.uuid4()),
    Ticket(9, 3, 17, uuid.uuid4()),
    Ticket(10, 3, 18, uuid.uuid4()),
    Ticket(11, 4, 21, uuid.uuid4()),
    Ticket(12, 7, 27, uuid.uuid4()),
    Ticket(13, 8, 29, uuid.uuid4()),
]

где 5,11,25,11,10,8,7,6,2,17,18,21,27,29 - номера мест,
Я написал вот такую функцию:

def get_certain_number_tickets(route, num):
    city = input('city: ')
    for item in route:
        if city == item.city:
            print(item)
    route_id = int(input('route: '))
    num = input("how many tickets do you need? ")
    list1 = []
    for ticket in tickets:
        length_tickets_place = 13
        ticket_emunerate = [(ticket.place + 1, tickets[ticket.place + 1] - ticket.place - 1)]
        a3 = list(dropwhile(lambda x: x[1] < length_tickets_place, ticket_emunerate))
        for item in range(a3[0][0], a3[0][0] + length_tickets_place):
            print(item)
        if ticket.idx < num:
            list1.append(f'{ticket}')

    print(list1)

    max_seat = route[route_id][3]
    seats = list(range(1, max_seat + 1))

То есть ввожу город(списки городов сделаны таким же списком что и билеты с помощью nametuple), выбираю рейс и пишу сколько билетов мне нужно. Ввожу допустим 2,мне выходит 2 билеты с номером места. Вот мне нужно сделать так чтобы эти места были рядом. Например билет 1 с местов №11, билет 2 с местов №12

Функцию написал. Но работает она только на вывод билетов, а дальше не могу разобраться

именно вот эта часть кода ругается
length_tickets_place = 13
        ticket_emunerate = [(ticket.place + 1, tickets[ticket.place + 1] - ticket.place - 1)]
        a3 = list(dropwhile(lambda x: x[1] < length_tickets_place, ticket_emunerate))
        for item in range(a3[0][0], a3[0][0] + length_tickets_place):
            print(item)
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Вообще-то это нетривиальный код, и чтобы всё сделать правильно, надо понимать, что же там делается и почему. Он не очень сложный, но есть нюансы. В частности, надо понимать, какому имени какой объект какого типа соответствует.
У вас в tickets лежат какие объекты? Можно ли из объекта такого типа вычесть число? Ответы на эти вопросы может вам показать дебаггер, если вы мысленно это не можете углядеть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы