<p>作为使用<code>.readlines</code>()的替代方案,您的评分系统可能会想到这一点:</p>
<pre><code>def customer_first(fh):
record = None
lines = fh.read().split('\n')
i = 0
while i < len(lines):
line = lines[i]
values = line.split(',')
if record == None or values[4] < record[4]:
record = values
i += 1
return record
</code></pre>
<p>在这里,我们调用<code>.read()</code>一次读入<em>整个</em>文件,然后<code>.split()</code>为每个换行将其读入单独的行。这基本上就是<code>.readlines()</code>在引擎盖下可能做的事情,并且是不使用该方法的代码的最直接的替换</p>
<hr/>
<p>您的评分系统可能也希望您这样做:</p>
<pre><code>def customer_first(fh):
record = None
i = 0
line = fh.readline()
while line != '':
values = line.rstrip('\n').split(',')
if record == None or values[4] < record[4]:
record = values
line = fh.readline()
return record
</code></pre>
<p><code>File.readline()</code>与<code>File.readlines()</code>类似,只是它只返回一行,如果到达文件末尾,则返回空字符串</p>
<hr/>
<p>另一种替代解决方案是使用<code>next()</code>遍历文件,并使用<code>try</code>/<code>except</code>块捕获<code>StopIteration</code>(这就是<code>for</code>循环在引擎盖下实际工作的方式)。不过,这是一种更复杂、更先进、更适合的方法,我认为你的老师不太可能期望你在这里使用,除非你刚刚学到:</p>
<pre><code>def customer_first(fh):
record = None
i = 0
try:
line = next(fh)
while line != '':
values = line.rstrip('\n').split(',')
if record == None or values[4] < record[4]:
record = values
line = next(fh)
except StopIteration
return record
</code></pre>
<hr/>
<p>我想提醒您,<strong>在可能的情况下使用<code>for</code>循环通常是好的做法,当在<code>for</code>循环中简单地迭代文件是不够的时,使用<code>.readlines()</code>通常不是坏的做法,你也不应该把这项作业当作今后避免做这些事情的标志。</strong>如果作业没有告诉你应该使用什么工具,而你最近在课堂上的讲座也没有涵盖上述任何一项,目的是给你提供线索,那么我认为这是一项糟糕的作业</p>
<p>此外,您的代码可能存在逻辑错误(请尝试<code>record == None and values[4] < record[4]</code>),但这不是您要问的问题,一旦评分系统开始实际运行您的代码,您将收到不同的错误消息,这些消息可能会引导您找到答案</p>