简体   繁体   English

使用数组时无法解决“列表索引超出范围”错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM