python - 编写一个函数,将文件名和单个字母作为输入,如果玩家的姓氏以该字符开头,则返回 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"
解决方案
当你这样做时:
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 行)
推荐阅读
- reactjs - ReferenceError:[BABEL] 未知选项:base.__esModule
- curl - 使用 Streamsets 连接到 Google Analytics
- php - 仅在某些情况下在 foreach 中包含 div
- sage - sage-math上模函数的实现
- c# - Xamarin 构建挂起
- python - 在 ubuntu 上安装 pywinrm
- sql - 创建表时如何引用另一个模式表的外键?
- node.js - 身份验证和令牌 node_js
- java - 在 Java 中使用正则表达式从字符串中提取信息
- dependency-injection - 在服务中访问 appsetting 值的最佳方式