(python)我一直得到一个索引器:字符串索引超出范围

2024-03-29 04:59:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力解决这个问题

实施​制图员​, ​mapFileToCount​, 它获取一个字符串(文件中的文本)并返回该字符串中大写的字数。一个词被定义为一个系列 由空格或换行符与其他单词分隔的字符。如果一个单词的第一个字母是大写的(A vs A),那么它就是大写的

我的python代码当前读取

def mapFileToCount(s):
    lines = (str(s)).splitlines()
    words = (str(lines)).split(" ")
    up = 0
    for word in words:
        if word[0].isupper() == True:
            up = up + 1
    return up

但是,我不断得到错误索引器:字符串索引超出范围

请帮忙


Tags: 文件字符串文本定义单词wordwordslines
2条回答

字符串索引超出范围意味着您试图访问的索引在字符串中不存在。这意味着您正试图从给定点的字符串中获取一个字符。如果给定的点不存在,那么您将尝试获取不在字符串内的字符

在您的代码中,它是word[0]

现在

  • 给定Hi huy \n hi you there
  • lines将是['Hi huy ', ' hi you there']
  • words将是["['Hi", 'huy', "',", "'", 'hi', 'you', "there']"],因为您使用str(lines)

我建议您立即使用words = re.split("\s+", s)拆分任何空格


然后IndexError的问题出现在类似Hi where are you__(u是空格)的情况下,当您拆分时,末尾将有一个空字符串,并且您无法访问该字符串的第一个字符,因此只需在if中添加一个条件

  • if word因为0大小的单词是False,而其他True

  • if word[0].isupper()供您测试

import re
def mapFileToCount(s):
    words = re.split("\s+", s)
    up = 0
    for word in words:
        if word and word[0].isupper():
            up = up + 1
    return up

相关问题 更多 >