Как мне перебрать список кортежей? - PullRequest
1 голос
/ 05 июля 2019

У меня есть некоторые сомнения с этой домашней работой на питоне.Упражнение состоит в следующем:

В этом автобусе имеется система контроля входа и выхода пассажиров, которая отслеживает количество находящихся на нем пассажиров и, таким образом, обнаруживает, что вместимость слишком высокая.

На каждой остановке вход и выход пассажиров представлен кортежем, состоящим из двух целых чисел.

bus_stop = (in, out)

Последовательность остановок представлена ​​списком этих кортежей.

stops = [(in1, out1), (in2, out2), (in3, out3), (in4, out4)]

Цели:

  • Использовать списки, кортежи
  • Использовать циклы while / for
  • Использовать минимум, максимум, длину
  • Использовать среднее, стандартноеотклонение

Задачи:

  • Рассчитать количество остановок.
  • Назначить переменной список, элементами которого являются количество пассажиров на каждой остановке (in-out),
  • Найдите максимальное занятие автобуса.

Пока я придумал этот код, но он ничего не возвращает, так что, определенноЯ делаю что-то не так из-за моей неопытности с Python.

bus_is_full = False
bus_capacity = 0
stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
while not bus_is_full == True:
    for stop in stops:
        bus_capacity = stops()
        if bus_capacity == 50:
            bus_is_full = True
            stops +=1 
        elif bus_capacity < 50:
            stops +=1
    print(bus_capacity)

Ответы [ 3 ]

0 голосов
/ 05 июля 2019

Вы можете привести свой кортеж в список.

    bus_is_full = False
    bus_capacity = 0
    stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
    number_stops = len(stops)
    print("The number of stops is : {0}\n".format(bus_capacity))
    i=0
    while i < number_stops :
        for stop in stops:
            l = list(stop)
            in_i = l[0]
            out_i = l[1]
            print("For the {0} stop, {1} passengers entered and {2} passengers left the bus".format(i, in_i, out_i) )
            i += 1
0 голосов
/ 06 июля 2019

Вот немного более простой способ написать то, что сказал Султан1991

bus_capacity = 0
stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
num_stops = 0
for on, off in stops:
    bus_capacity += on - off
    num_stops += 1
    if bus_capacity >= 50:
       break
print("Bus capacity:", bus_capacity)
print("Number of stops:",num_stops)

Также наперед: такие циклы не особенно эффективны для больших наборов данных. Поэтому, если вы работаете с большим количеством данных, чем просто с этим, я бы посоветовал взглянуть на библиотеки numpy или pandas, так как они могут значительно ускорить и сократить объем памяти, необходимый для таких операций.

0 голосов
/ 05 июля 2019

Код ниже останавливается на 3-й остановке с пропускной способностью, превышающей 50 (фактическая численность населения 56)

bus_is_full = False
bus_capacity = 0
stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
stops_count = 0 # count the number of bust stops till capacity limit reached (including this stop)
for stop in stops:
    bus_capacity += stop[0] - stop[1]  # update tot bus_capacity with change in current bus stop (e.g if (13, 7) -> +6 people added)
    if bus_capacity >= 50:
        bus_is_full = True
        stops_count += 1 
        break
    elif bus_capacity < 50:
        stops_count += 1
print(bus_capacity)
print(stops_count)
...