代码14

需要计算每个intend下有多少个query,即计算Q开头的

intend之间有空行

不仅有I,Q,R,有些还有P

这是最后一个intend的样子

错误代码:

f = open('/home/xbwang/Desktop/cs_update','r')
intend = 0
for line in f:
    if(line[0] == 'I'):
        intend = intend+1
f1 = open('/home/xbwang/Desktop/cs_update','r')
line1 = f1.readline()
count = [0]*30
for i in range(intend):
    while line1:
        line1 = f1.readline()if(line1[0] == 'Q'):
            count[i] = count[i]+1
        elif(line1[0] == 'I'):
            break
        else:
            continue
print count

报的错误:

正确代码:

f = open('/home/xbwang/Desktop/cs_update','r')
intend = 0
for line in f:
    if(line[0] == 'I'):
        intend = intend+1
f1 = open('/home/xbwang/Desktop/cs_update','r')
line1 = f1.readline()
count = [0]*30
for i in range(intend):
    while line1:
        line1 = f1.readline()
        if(len(line1) == 0):
            break
        else:
            if(line1[0] == 'Q'):
                count[i] = count[i]+1
            elif(line1[0] == 'I'):
                break
            else:
                continue
print count

错误原因分析:当line1为最后一个空白时,while循环继续执行,这个时候再调用readline函数读下一行就是空了,这个时候调用line1[0]当然是数组越界,因为line1这时候为空。

另一个值得注意的错误:

错误代码:

f = open('/home/xbwang/Desktop/cs_update','r')
intend = 0
for line in f:
    if(line[0] == 'I'):
        intend = intend+1
line1 = f.readline()
print line1
count = [0]*30
#for i in range(intend):
    #while line1:
            #line1 = f1.readline()
            #if(line1[0] == 'Q'):
                #count[i] = count[i]+1
            #elif(line1[0] == 'I'):
                #break
            #else:
                #continue
#print count

错误:

可以看到这里的输出是一个空行

错误原因分析:

line1 = f.readline()这一行出现了错误,因为之前已经有了“for line in f:”这一行,即已经把整个文件读完,所以用line1 = f.readline()再读就是空了。这和readline函数一样,每读一次,少一行。避免此错误的方法就是再open这个文件进行读。
原文地址:https://www.cnblogs.com/ymjyqsx/p/6410530.html