[英]Can't solve “List index out of range” error while using arrays
I'm attempting to write a "cash box" style password breaker that spins dials, each dial has every character on it, until the answer is found. 我正在尝试编写一个“钱箱”样式的密码破解器来旋转拨盘,每个拨盘上都有每个字符,直到找到答案为止。 I'm quite new to Python (And coding in general), but with a lot of help I was able to do it with numbers and letter (capitalized and decapitalized)
我对Python相当陌生(通常是编码),但是在很多帮助下,我能够使用数字和字母(大写和小写)
Now I'm trying to build it so it only checks for numbers and decapitalized letters, not capital letters. 现在,我正在尝试构建它,以便它仅检查数字和大写字母,而不检查大写字母。 Here is what I got:
这是我得到的:
def method_2(num_pass_wheels):
result = False
still_searching = True
print()
print("Using method 2 and searching with " + str(num_pass_wheels) + " characters.")
wheel = " abcdefghijklmnopqrstuvwxyz0123456789"
# set all of the wheels to the first position
pass_wheel_array = array('i', [1, 0, 0, 0, 0, 0, 0, 0, 0])
while still_searching:
ourguess_pass = ""
for i in range(0, num_pass_wheels): # once for each wheel
if pass_wheel_array[i] > 0:
ourguess_pass = wheel[pass_wheel_array[i]] +
ourguess_pass
print ("trying [" + ourguess_pass + "]")
if (check_pass(which_password, ourguess_pass)):
print ("Success! Password " + str(which_password) + " is " + ourguess_pass)
still_searching = False # we can stop now - we found it!
result = True
# spin the rightmost wheel and if it changes, spin the next one over and so on
carry = 1
for i in range(0, num_pass_wheels): # once for each wheel
pass_wheel_array[i] = pass_wheel_array[i] + carry
carry = 0
if pass_wheel_array[i] > 62:
pass_wheel_array[i] = 1
carry = 1
if i == (num_pass_wheels - 1):
still_searching = False
return result
The error message points to: 错误消息指向:
line 341, in <module>
foundit = method_2(8)
line 188, in method_2
ourguess_pass = wheel[pass_wheel_array[i]] + ourguess_pass
And throws the error: 并抛出错误:
IndexError: string index out of range
I know it has something to do with me removing the capital letters from "wheel" but I don't know how to go about fixing it. 我知道这与我从“ wheel”中删除大写字母有关,但是我不知道如何解决它。 Any help?
有什么帮助吗?
You hard coded a length check limit here: 您在此处硬编码了长度检查限制:
if pass_wheel_array[i] > 62: <-----
pass_wheel_array[i] = 1
carry = 1
wheel
only has only has 36 items in the version you posted. 您所发布的版本中,
wheel
只包含36个项目。 Instead of using 62
use len(wheel)
. 而不是使用
62
而是使用len(wheel)
。
But since array indices are zero based, you might want to change it to 但是由于数组索引是从零开始的,因此您可能需要将其更改为
if pass_wheel_array[i] > len(wheel) - 1:
#or
if pass_wheel_array[i] == len(wheel):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.