首页 > 解决方案 > 编写一个函数,将文件名和单个字母作为输入,如果玩家的姓氏以该字符开头,则返回 True

问题描述

“编写一个 playerHasLastInitial(filename, char) 函数,它接受文件名和单个字母作为输入,如果名单上的球员的姓氏以该字符开头,则返回 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"

标签: pythoncsv

解决方案


当你这样做时:

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,因为它一次只有 1 行)


推荐阅读