如何删除索引错误:在Python中遍历字典时字符串索引超出范围?

f87krz0w  于 2023-01-14  发布在  Python
关注(0)|答案(2)|浏览(161)

我正在尝试创建一个新词,同时比较两个字符串的字符,其中有以下标准。
有两个长度相等的字符串S和T
1.如果S处的字符等于T处的字符,则“B”将添加到名为“wordle”的新空字符串中
1.如果S和T的字符不同,那么“G”将被添加到wordle中。例如,s= ABCDE和T = EDCBA将给予wordle =BBGBB。下面是我的代码。

class Solution(object):

    def guess_game(self, s1, s2):
        dt = dict()
        wordle = ''
        if len(s1) == len(s2):
    
            for i in range(len(s1)):
                dt = {s1[i]: s2[i]}
    
            if dt.keys() == dt.values():
                wordle[i] += 'G'
            else:
                wordle[i] += 'B'
    
            return wordle
        else:
            print("The strings should be equal length")

if __name__ == "__main__":
    s1 = 'ABCDE'
    s2 = 'EDCBA'
    print(Solution().guess_game(s1, s2))

我收到以下错误。

wordle[i] += 'B'
 IndexError: string index out of range
chhqkbe1

chhqkbe11#

您可以使用'=='来比较它们并填充wrodle。

    • 代码:**
wordle = []
if len(s1) == len(s2):
    for i in range(len(s1)):
        if s1[i] == s2[i]:
            wordle.append('G')
        else:
            wordle.append('B')
    print("".join(wordle))
else:
    print("The strings should be equal length")

出现wordle [i]+='B'索引错误的原因:字符串索引超出范围是因为您试图在索引创建之前访问它

1mrurvl1

1mrurvl12#

出现IndexError的原因是,例如,在第一次迭代(i=0)中,您试图访问wordle[0],但wordle是一个空字符串,因此它在0处没有元素。
您所要做的只是在字符串后面附加一个字母,因此您只需要编写:

wordle = wordle + 'G'

(or else部件中的+ B
我也真的不明白为什么你要创建一个字典,然后比较keysvalues,当你可以直接看到s1[i]==s2[i]
请尝试以下操作:

class Solution(object):

    def guess_game(self, s1, s2):
        wordle = ''
        if len(s1) == len(s2):
            for i in range(len(s1)):
                if s1[i] == s2[i]:
                    wordle = wordle + 'G'
                else:
                    wordle = wordle + 'B'
            return wordle   
        else:
            print("The strings should be equal length")

if __name__ == "__main__":
    s1 = 'ABCDE'
    s2 = 'EDCBA'
    print(Solution().guess_game(s1,s2))

输出BBGBB
因为dt.keys()dt.values()具有不同的类型(分别为dict_keysdict_values),所以原始代码中字典键和值的比较失败。它没有!)。
如果你需要比较字典的键和值(这不是一个常见的需求),你可以在比较之前把它们都转换成列表,如下面的代码所示,我们可以看到对于一个键和值明显相同的字典,my_dict.keys() == my_dict.values()False,但是list(my_dict.keys()) == list(my_dict.values())True

my_dict = {'a': 'a', 'b': 'b'}

print(my_dict.keys())
print(type(my_dict.keys()))
print(my_dict.values())
print(type(my_dict.values()))
print(my_dict.keys() == my_dict.values())
print(list(my_dict.keys()) == list(my_dict.values()))

输出:

dict_keys(['a', 'b'])
<class 'dict_keys'>
dict_values(['a', 'b'])
<class 'dict_values'>
False
True

相关问题