您可以将所有行放入一个列表中lines = open(thefile).readlines()
,然后根据您的需要处理该列表 - 不是最有效但最简单的。
同样最简单的方法是执行多个循环,每个条件一个循环(除了 2,它不是可以违反的条件,而 5 不是真正的条件;-)。“所有以 a 开头的行,必须在以 b 开头的行之前”可以被认为是“以 a 开头的最后一行,如果有的话,必须在以 b 开头的第一行之前”,所以:
lastwitha = max((i for i, line in enumerate(lines)
if line.startswith('a')), -1)
firstwithb = next((i for i, line in enumerate(lines)
if line.startswith('b')), len(lines))
if lastwitha > firstwithb: raise Error
然后类似地对于“包含整数的行”:
firstwithint = next((i for i, line in enumerate(lines)
if any(c in line for c in '0123456789')), len(lines))
if firstwithint < firstwithb: raise Error
这对你的作业真的应该有很多提示——你现在可以自己做剩下的最后一点,条件4吗?
当然,您可以采取与我在这里建议的不同的策略(next
用于获取满足条件的行的第一个数字——这需要 Python 2.6,顺便说一句——并any
满足all
序列中的任何/所有项目是否满足一个条件),但我正在努力满足您的要求,以获得最大的简单性。如果您发现传统for
循环比next
,any
和更简单all
,请告诉我们,我们将展示如何将这些高级抽象形式的使用重新编码为那些较低层的概念!