Почему, если оператор выполняется, а оператор ложный - PullRequest
0 голосов
/ 04 апреля 2019

Ниже этого кода, если оператор выполняется и печатает занятый текст, когда моя запись не указана в списке in_line.Это проблема симуляции системы телефонии.

Я хочу, чтобы она переходила к оператору else при значении frm, а не в in_line

call_list =[ 
         [1,    4,      38,     1050],
         [3,    5,      50,     1090]]



call_in_progress = [
         [1,    3,   1055],
         [2,   6,   1099]]



in_line = [1,3,2,6]

   while(len(call_in_progress)!=0):
        while(len(call_list)!=0):

    next_call = call_list[0]
    print("next call : ",next_call)
    Arrtival_time = next_call[3]

    frm,to = next_call[0],next_call[1]
    print(frm,to)
    print(in_line)
    if( frm or to in in_line ):

        print("busy")

        if(next_call[0] in in_line ):
            m_index = in_line.index(next_call[0])

            in_line.pop(m_index+1)
            in_line.remove(next_call[0])
            print(in_line)

        call_list.pop(0)
    else:
        np = [next_call[0],next_call[1],next_call[2]+next_call[3]]
        call_in_progress.append(np)
        call_list.pop(0)

   # print("prog ",call_in_progress)
    print("Completed ",call_in_progress.pop(0))

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Порядок операций сбивает вас с толку.

У вас есть frm or to in line.Но in - это оператор, а or - это конъюнкция, и операторы всегда предшествуют конъюнкциям.Таким образом, это интерпретируется как (frm) or (to in line).

Поскольку frm не пусто, оно рассматривается как True, и условие в целом становится истинным.

Вы хотите что-то вродеfrm in line or to in line вместо.

0 голосов
/ 05 апреля 2019

В Python и во многих других языках условный тест ветвления, например, для операторов if, требует, чтобы условие было оператором (которое может быть одним выражением).Если необходимо выполнить несколько условий, каждое условие, как правило, должно быть отдельным оператором.

Таким образом, в том случае, как вы представили, вы хотите убедиться, что элементы frm и to принадлежатДля сбора каждое условие должно быть проверено отдельно.Иными словами, коллекция должна быть проверена дважды.

if to in in_line or frm in in_line:
    print("busy")

Самый простой способ - разбить ваши тесты на отдельные операторы if для каждого элемента, который вы хотите протестировать.Предыдущий код будет таким же, как и запись:

if to in in_line:
    print("busy")

if frm in in_line:
    print("busy")

Для условного AND:

if to in in_inline:
    if frm in in_inline:
        print("busy")

Как chepner указано в их комментарии, способтест в настоящее время записывается, сначала проверяет, является ли frm истинным значением, а затем проверяет, находится ли элемент to в коллекции in_line.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...