У вас есть пара проблем:
- У вас есть два цикла, но файл исчерпан первым l oop, поэтому второй l oop никогда не запускается (он находит
names
пустым и обходит тело l oop) - Вы тестируете
endswith('s')
, но почти каждая строка на самом деле заканчивалась новой строкой, которую вы не удалили
В качестве минимального исправления для обеих проблем (поддержание поведения двух циклов, поэтому вы печатаете строки в конце с помощью s
отдельно и первой):
with open("names.txt") as names:
for loop in names:
loop = loop.rstrip('\n') # Remove trailing newline, if any, to avoid doubled
# newline on print and make test work
if loop.endswith('s'):
print(loop)
names.seek(0) # Reset file pointer to beginning of file
for loop in names:
loop = loop.rstrip('\n') # Same strip as in prior loop
if loop.startswith('A'):
print(loop)
Если есть проходящая строка печать за один проход - это нормально, и вам не нужно печатать дважды строки, начинающиеся с A
и заканчивающиеся s
, вы можете упростить до:
with open("names.txt") as names:
for loop in names:
loop = loop.rstrip('\n') # Remove trailing newline, if any, to avoid doubled
# newline on print and make test work
if loop.startswith('A') or loop.endswith('s'):
print(loop)