目标:输入目标字符串;程序循环尝试随机字母+空格,直到目标词匹配生成的单词。
为了加快速度,当随机生成的单词具有与目标单词匹配的某个索引的字符时,该字符将附加到列表中,范围起始点现在是该“正确字符”列表的长度。
但是,在该程序的第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
答案 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
)并不会在另一个范围内神奇地改变该变量。