为什么在语句为假的情况下执行语句

时间:2019-04-04 18:48:04

标签: python simulation

如果我的frm和to value不在in_line列表中,则如果语句正在执行并打印繁忙文本,则在此代码下面。这是电话系统的仿真问题。

我希望当frm的值不进入in_line时转到else语句

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 个答案:

答案 0 :(得分:1)

操作顺序使您绊倒。

您当前有frm or to in line。但是in是一个运算符,而or是一个连词,并且运算符始终位于连词之前。因此,这被解释为(frm) or (to in line)

由于frm是非空的,因此将其视为True,并且整个条件变为真。

您想要的是frm in line or to in line之类的东西。

答案 1 :(得分:0)

在Python和许多其他语言中,分支条件测试(例如if语句的情况)要求条件是一条语句(可以是单个表达式)。如果需要满足多个条件,则通常需要将每个条件单独声明。

因此,在这种情况下(例如,您已经提出要确保frmto项属于集合的位置,则需要分别测试每个条件。换句话说,必须对集合进行两次测试。

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