Почему мои циклы while все еще работают, когда значение проходит условие - PullRequest
1 голос
/ 28 февраля 2020

Итак, я начинаю работать над проектом, чтобы сравнить время занятости двух человек и вывести список, у которого есть доступное время для обоих назначить встречу. Ввод:

Person 1 = [["9:00", "10:30"], ["12:00", "13:00"], ["16:00", "18:00"]]
Person 2 = [["10:00", "11:30"], ["12:30", "14:30"], ["14:30", "15:00"], ['16:00', '17:00']]

Вывод:

list = [["11:30","1200"],["15:00","16:00"]]
def Gettime(time1, time2):
    hour1, minutes1 = time1.split(":")
    hour2, minutes2 = time2.split(":")
    int_time1 = int(hour1) * 60 + int(minutes1)
    int_time2 = int(hour2) * 60 + int(minutes2)
    if int_time1 <= int_time2:
        return 1
    elif int_time1 > int_time2:
        return 2
    else:
        return 0


def FreeTime(sch1, sch2):
    list_nottime = []
    p1 = 0
    p2 = 0
    x = 0
    y = 0
    #while p2 < len(sch2) :
        #while p1 < len(sch1):
    while p1 < len(sch1) or p2 <len(sch2):
         if Gettime(sch1[p1][x], sch2[p2][y]) == 1:
            #print(sch1[p1][x], sch2[p2][y])
            list_nottime.append(sch1[p1][x])
            x += 1
            if x == 2:
                x = 0
                p1 += 1

         if Gettime(sch1[p1][x], sch2[p2][y]) == 2:
            #print(sch1[p1][x], sch2[p2][y])
            list_nottime.append(sch2[p2][y])
            y += 1
            if y == 2:
                y = 0
                p2 += 1

Таким образом, на этом конце (справа вверху) p2 == 4 и наше условие while равно p2 < len(Sch2) (что равно 4), и оно все еще запускает циклы, а затем выдает ошибки. Пожалуйста, проверьте и исправьте это Tks вы, ребята, тонна !!!! (я не носитель языка, поэтому мой английский sh плохой аф)

1 Ответ

1 голос
/ 28 февраля 2020

Итак, проблема в том, что перед тем, как вы вызовете секунду, пока l oop, вы увеличиваете значение для p1 и условие во втором, пока l oop обращается к sch[p1], который может выходить за пределы для данного массива. Вам нужно сохранить p1 во временной переменной и использовать это значение вместо обновления значения p1.

Или вам нужно условие для проверки краевых или граничных случаев. То же самое касается p2, где он увеличивается во втором внутреннем l oop, и первый может попытаться получить к нему доступ с индексом, выходящим за пределы.

...