Python' if'和'而'条件不起作用

时间:2017-05-25 19:24:50

标签: python if-statement while-loop conditional-statements

我正在编写一个简单的Python程序。它应该从制表符描述的文件中读取两个已排序的列表,并将它们合并到一个排序列表中。该算法并不太难,但Python似乎忽略了我的循环和if语句中的条件!

这是我的输入文件:

1   2   3   10
7   9   100

这里是带有用于调试的打印命令的相关代码位:

print 'list1 len =' + str(len(list1)) + ', list2 len = ' + str(len(list2))
while (i < len(list1)) or (j < len(list2)):
    print 'i = ' + str(i)
    print 'list1[i] = ' + str(list1[i])
    if (list1[i] < list2[j]):
        print str(list1[i]) + ' < ' + str(list2[j])
        output.append(list1[i])
        i += 1
    else:
        output.append(list2[j])
        j += 1

程序读入正确的值但似乎总是在每次迭代时将if条件读为true。

list1 len =4, list2 len = 3
i = 0
list1[i] = 1
1 < 7
i = 1
list1[i] = 2
2 < 7
i = 2
list1[i] = 3
3 < 7
i = 3
list1[i] = 10
10 < 7
i = 4
Traceback (most recent call last):
  File "q2.py", line 22, in <module>
     print 'list1[i] = ' + str(list1[i])
IndexError: list index out of range

if语句不仅不起作用(10 < 7不对!),它在while循环中失败,因为'i'获得到4,list1的大小。发生了什么事??

1 个答案:

答案 0 :(得分:1)

您的and循环测试中需要or,而不是while

while i < len(list1) and j < len(list2):

(i < len(list1)) or (j < len(list2))如果其中一项测试为真,那将是真的。因此,只要i小于len(list1)j就不会 小于len(list2)False or True仍为True

接下来,您的if测试最有可能是比较字符串,而不是整数。字符串按字典顺序进行比较:

>>> 'abc' < 'abd'
True
>>> 'ab' < 'b'
True
>>> '10' < '2'
True

在测试其他字符之前比较第一个字符,'1''2'之前排序。

比较整数:

if int(list1[i]) < int(list2[j]):

但是,您可能希望在读取文件输入时将其转换为整数。