Практическое занятие 5: Функции и файлы
Цель занятия
Заголовок раздела «Цель занятия»Научиться создавать и использовать функции, работать с файлами и подключать модули.
Функции
Заголовок раздела «Функции»Определение функции
Заголовок раздела «Определение функции»# Простая функция без параметровdef greet(): print("Привет, мир!")
greet() # Вызов функцииФункция с параметрами
Заголовок раздела «Функция с параметрами»def greet(name): print(f"Привет, {name}!")
greet("Анна")greet("Борис")Функция с несколькими параметрами
Заголовок раздела «Функция с несколькими параметрами»def greet(name, greeting): print(f"{greeting}, {name}!")
greet("Анна", "Добрый день")greet("Борис", "Здравствуйте")
# Именованные аргументыgreet(name="Вера", greeting="Привет")Функция с возвращаемым значением
Заголовок раздела «Функция с возвращаемым значением»def add(a, b): return a + b
result = add(5, 3)print(result) # 8Функция с возвращаемым значением и условием
Заголовок раздела «Функция с возвращаемым значением и условием»def check_age(age): if age >= 18: return "Совершеннолетний" else: return "Несовершеннолетний"
print(check_age(25)) # Совершеннолетнийprint(check_age(15)) # НесовершеннолетнийФункция со значением по умолчанию
Заголовок раздела «Функция со значением по умолчанию»def greet(name, greeting="Привет"): print(f"{greeting}, {name}!")
greet("Анна") # Привет, Анна!greet("Борис", "Здравствуйте") # Здравствуйте, Борис!Функция с переменным числом аргументов
Заголовок раздела «Функция с переменным числом аргументов»def sum_all(*numbers): return sum(numbers)
print(sum_all(1, 2, 3)) # 6print(sum_all(1, 2, 3, 4, 5)) # 15
def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}")
print_info(name="Анна", age=25, city="Москва")Рекурсивная функция
Заголовок раздела «Рекурсивная функция»def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n - 1)
print(factorial(5)) # 120Работа с файлами
Заголовок раздела «Работа с файлами»Чтение файла
Заголовок раздела «Чтение файла»# Метод 1: read() — чтение всего файлаwith open("example.txt", "r", encoding="utf-8") as file: content = file.read() print(content)
# Метод 2: readlines() — чтение построчно в списокwith open("example.txt", "r", encoding="utf-8") as file: lines = file.readlines() for line in lines: print(line.strip())
# Метод 3: итерация по строкамwith open("example.txt", "r", encoding="utf-8") as file: for line in file: print(line.strip())Запись в файл
Заголовок раздела «Запись в файл»# Перезапись файлаwith open("output.txt", "w", encoding="utf-8") as file: file.write("Привет, мир!\n") file.write("Это новая строка")
# Добавление в конец файлаwith open("output.txt", "a", encoding="utf-8") as file: file.write("\nДобавленная строка")Режимы открытия файлов
Заголовок раздела «Режимы открытия файлов»| Режим | Описание |
|---|---|
| ”r” | Чтение (режим по умолчанию) |
| “w” | Запись (перезаписывает файл) |
| “a” | Добавление (добавляет в конец) |
| “r+“ | Чтение и запись |
| ”wb” | Запись в бинарном режиме |
| ”rb” | Чтение в бинарном режиме |
Импорт модуля
Заголовок раздела «Импорт модуля»# Импорт всего модуляimport mathprint(math.sqrt(16)) # 4.0print(math.pi) # 3.141592653589793
# Импорт с псевдонимомimport math as mprint(m.sqrt(16)) # 4.0
# Импорт конкретной функцииfrom math import sqrtprint(sqrt(16)) # 4.0
# Импорт нескольких функцийfrom math import sqrt, pi, sinprint(sqrt(16))print(pi)Создание собственного модуля
Заголовок раздела «Создание собственного модуля»Создайте файл my_module.py:
def greet(name): return f"Привет, {name}!"
def calculate_area(length, width): return length * width
PI = 3.14159Использование модуля:
# Вариант 1import my_moduleprint(my_module.greet("Анна"))print(my_module.calculate_area(5, 3))
# Вариант 2from my_module import greet, calculate_areaprint(greet("Анна"))print(calculate_area(5, 3))Практические примеры
Заголовок раздела «Практические примеры»Функция для анализа списка чисел
Заголовок раздела «Функция для анализа списка чисел»def analyze_numbers(numbers): if not numbers: return "Список пуст"
minimum = min(numbers) maximum = max(numbers) average = sum(numbers) / len(numbers)
return { "минимум": minimum, "максимум": maximum, "среднее": round(average, 2), "количество": len(numbers) }
numbers = [5, 2, 9, 1, 7, 3]result = analyze_numbers(numbers)print(result)Функция для работы с файлами
Заголовок раздела «Функция для работы с файлами»def save_to_file(filename, data): with open(filename, "w", encoding="utf-8") as file: for item in data: file.write(f"{item}\n")
def read_from_file(filename): with open(filename, "r", encoding="utf-8") as file: return [line.strip() for line in file]
# Использованиеnames = ["Анна", "Борис", "Вера"]save_to_file("names.txt", names)
loaded_names = read_from_file("names.txt")print(loaded_names)Функция для проверки палиндрома
Заголовок раздела «Функция для проверки палиндрома»def is_palindrome(text): # Удаляем пробелы и приводим к нижнему регистру text = text.replace(" ", "").lower() return text == text[::-1]
print(is_palindrome("А роза упала на лапу Азора")) # Trueprint(is_palindrome("Привет")) # FalseФункция для конвертации температуры
Заголовок раздела «Функция для конвертации температуры»def celsius_to_fahrenheit(celsius): return (celsius * 9/5) + 32
def fahrenheit_to_celsius(fahrenheit): return (fahrenheit - 32) * 5/9
def convert_temperature(value, from_unit): from_unit = from_unit.lower() if from_unit == "c" or from_unit == "celsius": return celsius_to_fahrenheit(value) elif from_unit == "f" or from_unit == "fahrenheit": return fahrenheit_to_celsius(value) else: return "Неизвестная единица измерения"
print(convert_temperature(0, "c")) # 32.0print(convert_temperature(32, "f")) # 0.0Задания для самостоятельной работы
Заголовок раздела «Задания для самостоятельной работы»-
Создайте функцию
is_prime(n), которая проверяет, является ли число простым. -
Напишите функцию
read_and_count(filename), которая читает файл и возвращает количество строк, слов и символов. -
Создайте модуль
text_utils.pyс функциями для работы с текстом (подсчёт слов, поиск самого длинного слова и т.д.). -
Напишите программу, которая:
- Запрашивает список задач
- Сохраняет их в файл
- Читает файл и выводит задачи с нумерацией
Пример решения задания 1
Заголовок раздела «Пример решения задания 1»def is_prime(n): if n <= 1: return False if n <= 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 while i * i <= n: if n % i == 0 or n % (i + 2) == 0: return False i += 6 return True
for num in range(1, 21): if is_prime(num): print(f"{num} — простое число")Пример решения задания 2
Заголовок раздела «Пример решения задания 2»def read_and_count(filename): with open(filename, "r", encoding="utf-8") as file: lines = file.readlines()
line_count = len(lines) word_count = sum(len(line.split()) for line in lines) char_count = sum(len(line) for line in lines)
return { "строк": line_count, "слов": word_count, "символов": char_count }
# Создадим тестовый файлwith open("test.txt", "w", encoding="utf-8") as file: file.write("Привет, мир!\n") file.write("Это тестовый файл.\n") file.write("Третья строка.")
result = read_and_count("test.txt")print(result)Полезные ресурсы
Заголовок раздела «Полезные ресурсы»Следующий шаг
Заголовок раздела «Следующий шаг»На следующем занятии мы создадим первого веб-скрапера и сохраним данные в JSON.