rosh1k
@rosh1k
python - не более

IndexError: list index out of range почему так?

Имеется такой файл, в котором есть такие данные как: игра , логин , пароль.621227dce52b5868351452.png
Дальше нам требуется чтобы компьютер выводил так:
Игра: .. Логин: .. Пароль: ..
Код вот такой:
import os
import csv
from tkinter import *
import tkinter as tk
from tkinter import filedialog
import webbrowser as web 



def close_window():
	global login
	login = login_entry.get()
	root.destroy()

def choose_file():
	global file_path 
	file_path = filedialog.askopenfilename(filetypes = [("CSV", ".csv")])


root = Tk()
root.title('Пароли')
root.geometry('400x260')

login_label = Label(root, text = 'Введите логин')
login_label.pack(anchor = CENTER)
login_entry = Entry(root)
login_entry.pack(anchor = CENTER)
Button_choose_file = Button(root, text = "Выбрать файл" , command =choose_file)
Button_choose_file.pack(anchor = S)
Button = Button(root, text = "Начать" , command =close_window)
Button.pack()
root.mainloop()


with open (file_path , 'r')  as f:
	a = csv.reader(f, delimiter = ';')
	s = 0
	data_csv_read = ""
	for i in a:
		s+=1

		game_csv , login_csv , password_csv = i
		data_csv_read.append((game_csv, login_csv, password_csv))

games_len = len(data_csv_read)

print(data_csv_read)
print(games_len)
games_len = int(games_len)
for i in range(games_len):
	game_plus = int(0)
	login_plus = int(1)
	password_plus = int(2)
	print('Игра: ' + str(data_csv_read[game_plus]) + " Логин: " + str(data_csv_read[login_plus]) + " Пароль: " + str(data_csv_read[password_plus]))
	game_plus += 1
	login_plus += 1
	password_plus += 1

Но при попытке сделать это:
Traceback (most recent call last):
  File "D:\!all\rm\passwordik.py", line 55, in <module>
    print('Игра: ' + str(data_csv_read[game_plus]) + " Логин: " + str(data_csv_read[login_plus]) + " Пароль: " + str(data_csv_read[password_plus]))
IndexError: list index out of range
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@dmshar
Ну так вам же ясно написали list index out of range. Вы пробовали это выражение перевести? А понять?
У вас в файле две записи.
Вот тут data_csv_read[password_plus] вы наверное думаете, что обращаетесь к полю "пароль" вашей текущей записи? На самом деле вы обращаетесь к второму элементу списка data_csv_read, потому что предварительно написали password_plus = int(2). Т.е. по факту имеем
data_csv_read[2]
а таких записей у вас всего две. очевидно надо было писать что-то вроде

data_csv_read[i][password_plus]

Но это, конечно, не все проблемы, которые у вас есть.
Вызывает мягко говоря недоумение вот этот фрагмент:

for i in range(games_len):
  game_plus = int(0)
  login_plus = int(1)
  password_plus = int(2)
 ..........
  game_plus += 1
  login_plus += 1
  password_plus += 1

Вас не смущает, что ПРИ КАЖДОЙ ИТЕРАЦИИ вашего цикла вы выполняете действия с одними и теми-же значениями game_plus, login_plus, password_plus и что три последние строчки указанного фрагмента в таком случае просто бессмысленны?

Но и это еще не все.
Вас не смущает вот эта последовательность:
data_csv_read = ""
data_csv_read.append((game_csv, login_csv, password_csv))

при том, что строковый объект не имеет метода append?

Ну и еще пару ляпов, о которых говорить пока даже рано. Может все-таки вы сначала прочитаете какую-нибудь книжечку по Python, попробуете повыполнять упражнения в порядке "от простого к сложного", а не будете пытаться писать код, который вам пока "не по зубам"? Иначе так и будете за каждым вопросом и ошибкой на форум бегать, пока всем не надоест отвечать на детские вопросы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы