不明白这个字符串索引超出范围错误

时间:2017-10-30 21:19:58

标签: python python-3.x indexing range

目标:输入目标字符串;程序循环尝试随机字母+空格,直到目标词匹配生成的单词。

为了加快速度,当随机生成的单词具有与目标单词匹配的某个索引的字符时,该字符将附加到列表中,范围起始点现在是该“正确字符”列表的长度。

但是,在该程序的第7个循环中,将始终在SCORE函数的第一个IF语句中指示“字符串索引超出范围”错误。我不明白这是怎么可能的,因为范围停止是最重要的,我使用目标字长作为我的停止值。

感谢任何帮助。谢谢。

使用Python3的Jupyter Notebook

import random

attempt_list = []


def main():
    goal_strg = 'got it'
    goal_len = len(goal_strg)
    rand_strg= ''
    gen_rand_string(goal_len)
    score(goal_strg, rand_strg)

def gen_rand_string(goal_len): #generates random string to compare
    alphabet = 'abcdefghijklmnopqrstuvwxyz '
    rand_strg = '' 

    for i in range(goal_len):
        rand_strg = rand_strg + alphabet[random.randrange(27)]
        print (rand_strg)

    return rand_strg

def score(goal_strg, rand_strg): #compares rand str and goal str and scores
    x = 0
    x += 1

    for i in range(len(attempt_list), len(goal_strg)):
        if i <= 5 and (rand_strg[i] == goal_strg[i]):
            attempt_list.append(rand.strg[i])
            print (attempt_list)
            print ((len(attempt_list))/(len(goal_strg)))
        elif x%1000000 == 0:
            print (x)
        else: 
            continue 

1 个答案:

答案 0 :(得分:2)

您似乎误解了Python变量的工作原理:

rand_strg= ''
gen_rand_string(goal_len)

变量rand_strg仍然是'',因为您没有将gen_rand_string()的结果分配给它。你不需要在Python中初始化变量(所以上面的第一行是不必要的),但你需要说

rand_strg = gen_rand_string(goal_len)

简单地return一个局部变量(恰好也被命名为rand_strg)并不会在另一个范围内神奇地改变该变量。