超出范围错误?

时间:2017-03-19 01:34:40

标签: python range output counting

我正在构建一个接受表示多行的字符串(文本)的函数,并计算以数字(0-9)开头的行数,然后返回一个整数作为计数结果。

我使用split来获取每一行,然后获得检查第一个索引的函数。我得到一个超出范围的错误,因为一些测试用例有空格作为第一个索引。我该如何解决这个问题?

这是确切的错误:

错误:test_count_digit_leading_lines_14(主要 .AllTests)

追踪(最近一次通话):   在test_count_digit_leading_lines_14中输入“testerl7.py”,第88行     def test_count_digit_leading_lines_14(self):self.assertEqual(count_digit_leading_lines(“\ t4G \ n4G \ n4 \ tG \ n \ n4000 \ n55 \ nsix \ n7天”),5)   在count_digit_leading_lines中输入文件“/Users/kgreenwo/Desktop/student.py”,第8行     check = newlines [i] [0] #check每行中的第一个字符 IndexError:字符串索引超出范围

以下是示例输出:

  

count_digit_leading_lines(“AAA \ n1st”)→1#第2行以数字1开头

     

count_digit_leading_lines(“\ t4G \ nHz \ n”)→0#第1行以标签开头

     

count_digit_leading_lines(“0 \ n0 3 \ nn4 \ n”)→2

这是我目前的代码:

def count_digit_leading_lines(text):
count=0
if text == " ":
    return 0
else:
    newlines=text.rstrip('\n').split('\n') #split each line
    for i in range(len(newlines)): 
        if newlines[i] != None:
            check=newlines[i][0] #check first character in each line
            if check.isdigit(): #if 1st is digit 0-9
                count+=1
    return count #return how many times

1 个答案:

答案 0 :(得分:0)

newlines数组中可能有0个长度的字符串。您应该首先删除这些元素:

# add this line newlines = [ a for a in newlines if len(a) > 0 ]
# as shown below:


def count_digit_leading_lines(text):
    count=0
    if text == " ":
        return 0
    else:
        newlines = text.rstrip('\n').split('\n') #split each line
        newlines = [ a for a in newlines if len(a) > 0 ]
        for i in range(len(newlines)): 
            check=newlines[i][0] #check first character in each line
            if check.isdigit(): #if 1st is digit 0-9
                count+=1