【发布时间】:2014-09-20 20:19:11
【问题描述】:
我的任务是让用户输入年份,并使用该输入在文本文件中逐行搜索奥运运动员当年赢得的金牌总数。文本文件包含数千个条目,排序如下:
LAST_NAME
FIRST_NAME
YEAR
POSITION
\n
我认为这样做的方法是确保年份匹配,如果匹配,请将名为 blockIsValid 的变量的值设置为 True。然后程序将检查该块是否有效(以避免考虑其他年份的金牌),如果是,则通过寻找一个(位置,表示金牌)来检查金牌。在金牌记录在变量goldMedals 中之后,blockIsValid 会被重置为False。
检查年份部分有效,但它从来没有找到黄金,而是每次都显示: [注意] 我们应该检查每一行,这就是为什么有一堆行说“不正确的年份” !”
def findAnnualMedals(year):
blockIsValid = None
goldMedals = 0
file = open('athletes.txt', encoding='utf-8')
for currentLine, line in enumerate(file):
if line.strip() == year:
print("Correct year!")
blockIsValid = True
else:
print("Incorrect year!")
blockIsValid = False
if blockIsValid == True:
if line.strip() == "1":
print("Gold!")
goldMedals += 1
else:
print("Not gold!")
blockIsValid = False
【问题讨论】:
-
因为
line.strip()永远不会等于"1"。 -
查看年份后需要进入下一行。现在,
line.strip()的两个调用都在 same 行上运行。 -
您正在为所有包含姓名和职位的行打印
Incorrect year!。 -
@parsimoni,但是 for 循环不是遍历所有行并在每一行上运行 if 语句吗?
-
是的,但在单个循环中,
line是同一个变量。line只有在整个循环体执行完毕后才会递增到下一行。
标签: python file loops if-statement