Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions lab1_var21.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import argparse
import re


NAME_PATTERN = r'^[А-ЯЁ][а-яё]+$'


def is_valid_name(value: str) -> bool:
"""Check if the name matches required pattern."""
return re.fullmatch(NAME_PATTERN, value) is not None


def main() -> None:
"""Program entry point."""
parser = argparse.ArgumentParser(description="Lab 1 Variant 21")
parser.add_argument("filename", type=str, help="Input file name")
args = parser.parse_args()

result = []

try:
with open(args.filename, "r", encoding="utf-8") as file:
surname = None
name = None

for line in file:
line = line.strip()

match_surname = re.match(r'^Фамилия:\s*(.+)$', line)
if match_surname:
surname = match_surname.group(1)
continue

match_name = re.match(r'^Имя:\s*(.+)$', line)
if match_name:
name = match_name.group(1)

if surname and name:
if is_valid_name(surname) and is_valid_name(name):
result.append(f"{surname} {name[0]}.")
surname = None
name = None

except FileNotFoundError:
print("Файл не найден")
return

result.sort()

with open("lab1_var21_output.txt", "w", encoding="utf-8") as out:
for item in result:
out.write(item + "\n")

print(f"Найдено корректных записей: {len(result)}")
for item in result:
print(item)


if __name__ == "__main__":
main()