如果我的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))
答案 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语句的情况)要求条件是一条语句(可以是单个表达式)。如果需要满足多个条件,则通常需要将每个条件单独声明。
因此,在这种情况下(例如,您已经提出要确保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
。