代码之家  ›  专栏  ›  技术社区  ›  Chris Charley

IndexError:使用python3.7时字符串索引超出范围

  •  0
  • Chris Charley  · 技术社区  · 6 年前

    程序要求输入几个句子,然后将句子中第一个单词的第一个字母大写。

    def main():
        sentence = input('Enter a few sentences (with periods to end them) ')
    
        s = capitalize_sentence(sentence)
    
        #print(s)
    
    def capitalize_sentence(s):
        sentences = s.split('.');
        result = ''
    
        for sentence in sentences:
            # these print as expected no index errors
            #for i in range(len(sentence)): 
            #    print(i, sentence[i])
    
            if sentence[0] == ' ': # assuming 1 space separates sentences
                result += ' '
                result += sentence[1].upper()
                result += sentence[2:]
                result += '.'
            else:
                result += sentence[0].upper()
                result += sentence[1:]
                result += '.'
    
        return result
    
    main()
    

    回溯输出为:

    “C:/Old\u Data/python/book/ch08/ch08\u ex08\u sentence\u capitalizer.py”,行 29英寸 4,主要 s=大写句子(句)文件“C:/Old\u Data/python/book/ch08/ch08\u ex08\u sentence\u capitalizer.py”,第行 17,大写的句子 如果句子[0]='':#假设1空格分隔句子索引器:字符串索引超出范围

    谢谢你的帮助。

    编辑:我提供的字符串是:你好。你好吗。

    3 回复  |  直到 6 年前
        1
  •  4
  •   Aleph Aleph    6 年前

    "howdy. how are you.".split('.')  # = ['howdy', ' how are you', '']
    

    [0] 空字符串的第个字符。在循环中,应该检查句子是否为空并跳过它(例如,使用 continue )如果是:

    for sentence in sentences:
        if not sentence:
            continue
        elif sentence[0] == ' ': # assuming 1 space separates sentences
            result += ' '
            # etc.
    
        2
  •  1
  •   nosklo    6 年前

    您有一个输入字符串,拆分后的句子没有字符。

    sentence[0] 失败的原因 sentence "" . 不能获取空字符串的第一个字符。你得到了吗 IndexError: string index out of range .

    这个 for 您注释的循环可以工作,因为当字符串为空时,它永远不会进入内部代码块。只会跳过打印任何内容。

    我就是这样写函数的:

    def capitalize_sentence(s):
       return '. '.join(text.strip().capitalize() 
           for text in s.split('.') if text.strip()) + '.'
    

    测试它:

    >>> capitalize_sentence("howdy. how are you.")
    'Howdy. How are you.'
    
        3
  •  1
  •   Acccumulation    6 年前

    def capitalize_sentence(s):
        sentences = s.split('.');
        result = ''
        for sentence in sentences:
            for i, char in enumerate(sentence):
                if char == ' ':
                    result +=' '
                    continue
                result += char.upper()
                result += sentence[i+1:]
                result+='.'
                break
        return result
    
    def capitalize_sentence(s):
        sentences = s.split('.');
        result = ''
        for sentence in sentences:
            while sentence:
                result += sentence[0].upper()
                if sentence[0] != ' ':
                    result += sentence[1:]
                    result+='.'
                    break
                sentence = sentence[1:]
        return result