首页 > 解决方案 > 如何修复此代码中的此错误?索引超出范围

问题描述

我有一个函数可以让我放置任何字符串并按字母顺序返回高值。例如,如果我有一个像“Hello world”这样的句子并且我们认为它world大于hello然后我们将返回world

这个高值是通过我之前在 中设置的指数来衡量的string_index_in_char

def func(string):
    char = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    split_string = string.split()
    i = 0
    x = ""

    # get letters
    string = string.lower()
    for s in string:
        if s in char:
            string_index_in_char = char.index(s) + 1
        else:
            string_index_in_char = 0
        x += str(string_index_in_char)
        split_any_char_not_letters = x.split("0")
    # convert string into interger in list  
    for i in range(0, len(split_any_char_not_letters)): 
        split_any_char_not_letters[i] = int(split_any_char_not_letters[i])      
    convert_to_int = split_any_char_not_letters 

    # (split_string, convert_to_int) comparison
    n = convert_to_int.index(max(convert_to_int))
    my_string = split_string[n]
    print("%s -> %s" %(string, my_string.lower()))


#func("This Is my home")
func("Hello wOrld")

我收到此错误:

Traceback (most recent call last):
  File "D:\courses\udacity-python\python\Exam\alphabet\alphabet 5.py", line 27, in <module>
    func("This Is my home")
  File "D:\courses\udacity-python\python\Exam\alphabet\alphabet 5.py", line 23, in func
    my_string = split_string[n]
IndexError: list index out of range

当我键入任何其他单词"man i need a taxi up to Ubud"或某些单词时,我不会出现任何问题。那么,尽管在我输入“hello world”时它没有向我发送此错误,但为什么它会收到此错误?

标签: python

解决方案


按照@Parakiwi 的建议进行了更新:在您的示例中
拆分时会出现问题zero:这是我的家,t 位于位置,20因为您拆分0它会通过向拆分列表添加额外的值来影响代码,从而导致错误。更改为除 char 索引之外的任意数字<<carefully chosen split criteria>>都可以:

改变:

if s in char:
    string_index_in_char = char.index(s) + 1
    print(string_index_in_char)
else:
    string_index_in_char = "^"
x += str(string_index_in_char)
split_any_char_not_letters = x.split("^")

前:

if s in char:
            string_index_in_char = char.index(s) + 1
        else:
            string_index_in_char = 0
        x += str(string_index_in_char)
        split_any_char_not_letters = x.split("0")  

但是,您需要处理两个单词相等的情况。


推荐阅读