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
  • Вопрос задан
  • 113 просмотров
Решения вопроса 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, попробуете повыполнять упражнения в порядке "от простого к сложного", а не будете пытаться писать код, который вам пока "не по зубам"? Иначе так и будете за каждым вопросом и ошибкой на форум бегать, пока всем не надоест отвечать на детские вопросы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы