"Напишите функцию playerHasLastInitial (имя файла, символ), которая принимает имя файла и одну букву в качестве входных данных и возвращает значение True, если у игрока в списке есть фамилия, начинающаяся с этого символа, в противном случае - False. Мы хотим избежать загрузки весь файл в памяти, поэтому используйте цикл while и метод readline (), а не методы readlines () или read () "

Мне нужно использовать цикл while, и я не могу использовать dict.

Таким образом, имена в первом столбце являются первыми и последними, поэтому, когда я пытаюсь разделить их на два отдельных элемента, я получаю «IndexError: строковый индекс вне диапазона»

def playerHasLastInitial(filename, char):
    f = open(filename, "r")
    while True:
        lines = f.readline()
        for v in lines:
            name = v.split(" ")[0]
            lastName = name[1]

            if char in lastName:
                return True
            else:
                return False

Итак, я должен иметь:

playerHasLastInitial ('C: \ Users \ wpqx1 \ Documents \ hw5 \ cubsRoster.csv', 'A') True

Я получаю "IndexError: string index out of range"

0
David Holland 24 Окт 2019 в 08:14
Три столбца: «Имя, возраст, код страны». Перечислены имена: Альберто Альмора, Хавьер Баез и т. Д. Поэтому мне нужно разделить эту категорию.
 – 
David Holland
24 Окт 2019 в 08:22
Имя Возраст Страна Код Джим Аддучи 34 CA Альберт Альмора 25 США Адберт Алзолай 24 VE Хавьер Баез 26 PR Тони Барнетт 35 США Дэвид Бот 26 США Брэд Брач ​​33 США Крис Брайант 27 США Виктор Каратини 25 PR Николас Кастелланос 27 США Ксавье Седено 32 PR Тайлер Чатвуд 29 США Стив Цишек 33 США Тим Коллинз 29 США
 – 
David Holland
24 Окт 2019 в 08:26

1 ответ

Когда вы это сделаете:

lines = f.readline()

Вы получаете только 1 строку. Итак, когда вы будете делать следующее:

for v in lines:

lines это 1 длинная строка, поэтому v это всего 1 символ за раз, поэтому name также 1 символ. Итак, когда вы будете делать следующее:

lastName = name[1]

Вы получаете сообщение об ошибке, поскольку name не имеет индекса "1", а только индекса "0".

Вам нужно сбросить цикл и сделать:

name = lines.split(" ")[0]

И рекомендуется изменить некоторые имена переменных (например, line вместо lines, так как это всего одна строка за раз)

0
Aryerez 24 Окт 2019 в 08:26