Вы можете поместить все строки в список с помощью 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
В этом shouild действительно много подсказок для вашей домашней работы - можете ли вы сейчас сделать последний оставшийся бит, условие 4?
Конечно, вы можете взять разные такты из того, что я предлагаю здесь (используя next
, чтобы получить первое число строки, удовлетворяющее условию - для этого требуется Python 2.6, btw - и any
и all
чтобы удовлетворить, если какой-либо / все элементы в последовательности соответствуют условию), но я пытаюсь соответствовать вашему запросу для максимальной простоты. Если вы обнаружите, что традиционные циклы for
проще, чем next
, any
и all
, дайте нам знать, и мы покажем, как перекодировать эти формы высшей абстракции в эти концепции нижнего уровня!