#python #arrays #list #indexoutofrangeexception
#питон #массивы #Список #исключение indexoutofrangeexception
Вопрос:
итак, следующий код предназначен для проверки всех возможных комбинаций символов, пока не найдет ту, которую вы ввели, однако в какой-то момент он сообщает, что индекс списка находится вне диапазона, как мне это исправить?
password = input()
chars = "abcdefghijklmnopqrstuvwxyz1234567890"
guess = ""
chars = list(chars)
chararray = []
for l in password:
chararray.append(0)
while guess != password:
guess = ""
for element in chararray:
guess = guess chars[element]
chararray[len(chararray) - 1] = 1
i = 0
while i < len(chararray) - 1:
if i 1 > len(chars):
chars[i 1] = 0
chars[i] = 1
i = 1
print(guess)
часть index out of range находится в той части, которая гласит
guess = guess chars[element]
Комментарии:
1. Вы увеличиваетесь
chararray[-1]
навсегда. Он быстро приобретет значение , превышающееlen(chars)
, так чтоchars[chararray[-1]] > len(chars)
.2. так как же мне это исправить?
3. Я не совсем понимаю, что вы имеете в виду
4. @ProfMonkey07 Код в вашем вопросе выглядит как неудачная попытка преобразовать программу, написанную на C, в Python. Откуда вы его скопировали?
5. это весь оригинальный код Python, я вроде как новичок в программировании
Ответ №1:
Я все исправил
chars = "abcdefghijklmnopqrstuvwxyz1234567890"
guess = ""
chars = list(chars)
chararray = []
for l in password:
chararray.append(0)
while guess != password:
guess = ""
for element in chararray:
print(element)
guess = guess chars[element]
chararray[len(chararray) - 1] = 1
i = 0
while i < len(chararray) - 1:
if chararray[i 1] >= len(chars) - 1:
chararray[i 1] = 0
chararray[i] = 1
i = 1
print(guess)```
Ответ №2:
Вы увеличиваете только последний элемент chararray в каждом цикле, получая доступ к элементам chars[] , который фиксирован на 36 элементах. Для тестового ввода hello
ваша программа будет работать следующим образом:
loop 1:
chararray = [0,0,0,0,0]
loop 2:
chararray = [0,0,0,0,1]
loop 3:
chararray = [0,0,0,0,2]
Если ваша программа угадает неправильно 36 раз, она увеличит последний элемент chars также в 36 раз, так что с 37-й попытки так и будет chararray = [0, 0, ..., 36]
, и поскольку внутренний цикл выполняется для всех элементов chararray, он в конечном итоге попытается выполнить guess = guess chars[36]
, что завершится неудачей, потому что в chars всего 36 элементов.