Программы на Python: от скриптов до искусственного интеллекта
Обзор возможностей Python для создания программ
Python является языком общего назначения, что позволяет создавать программы практически для любой области: от простых скриптов до сложных систем искусственного интеллекта. Благодаря большому количеству библиотек и фреймворков разработка становится быстрой и эффективной. В данном обзоре будут рассмотрены основные направления, в которых Python применяется наиболее часто, с примерами решений и типичными трудностями.
Как автоматизировать рутинные задачи с помощью скриптов?
Для автоматизации часто используют модули os, shutil, pathlib и subprocess. Пример: копирование всех файлов определённого расширения из одной папки в другую.
import os
import shutil
import glob
src_dir = '/path/to/source'
dst_dir = '/path/to/destination'
for file in glob.glob(os.path.join(src_dir, '*.txt')):
shutil.copy(file, dst_dir)
print(f'Copied {file}')
какие программы можно написать на python (какие программы можно написать на python)
Проблема: если целевая папка не существует, возникнет ошибка FileNotFoundError. Решение: предварительно создавать папку с помощью os.makedirs(dst_dir, exist_ok=True).
Каким образом создаются веб-приложения на Python?
Для веб-разработки популярны фреймворки Django, Flask, FastAPI. Ниже показан минимальный сервер на Flask.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return '<h1>Привет, мир!</h1>'
if __name__ == '__main__':
app.run(debug=True)
Типичная ошибка: импорт Flask может отсутствовать, если не установлен Flask. Решение: выполнить pip install flask.
Как написать парсер и извлечь данные с веб-страницы?
Используются библиотеки requests и BeautifulSoup. Пример получения заголовков новостей.
import requests
from bs4 import BeautifulSoup
url = 'https://example.com/news'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
titles = soup.find_all('h2', class_='news-title')
for title in titles:
print(title.get_text(strip=True))
Проблема: некоторые сайты блокируют запросы без заголовков User-Agent. Решение: добавить headers = {'User-Agent': 'Mozilla/5.0'}.
Как создать графический интерфейс (GUI) с помощью Python?
В стандартной поставке есть модуль Tkinter. Пример простого окна с кнопкой.
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.title('Пример GUI')
def show_message():
messagebox.showinfo('Информация', 'Кнопка нажата!')
btn = tk.Button(root, text='Нажми меня', command=show_message)
btn.pack(pady=20)
root.mainloop()
Ошибка: если забыть вызвать root.mainloop(), окно не отобразится.
Каким образом можно обрабатывать и анализировать данные?
Библиотеки Pandas, NumPy, Matplotlib. Пример загрузки CSV, расчёта среднего и построения графика.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('sales.csv')
mean_sales = df['sales'].mean()
print(f'Средние продажи: {mean_sales}')
df.plot(x='date', y='sales', kind='line')
plt.show()
Проблема: если файла нет, возникнет FileNotFoundError. Решение: обработать через try-except.
Как создать нейросеть для классификации изображений?
Используются TensorFlow или PyTorch. Пример на Keras (входит в TensorFlow).
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# model.fit(train_images, train_labels, epochs=5) – закомментировано
print('Модель создана, готова к обучению')
Сложность: требует большого количества данных и вычислительных ресурсов. Рекомендуется использовать GPU или облачные сервисы.
Как разработать простую игру на Python?
Модуль Pygame позволяет создавать 2D-игры. Пример: окно с движущимся квадратом.
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Простая игра')
x, y = 50, 50
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]: x -= 1
if keys[pygame.K_RIGHT]: x += 1
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255, 0, 0), (x, y, 50, 50))
pygame.display.flip()
pygame.quit()
Проблема: если Pygame не установлен, импорт не сработает. Решение: pip install pygame.
Как написать Telegram-бота?
Используется библиотека python-telegram-bot (или aiogram). Пример эхо-бота.
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
def start(update, context):
update.message.reply_text('Привет! Я эхо-бот.')
def echo(update, context):
update.message.reply_text(update.message.text)
updater = Updater('ТОКЕН', use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start', start))
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))
updater.start_polling()
updater.idle()
Ошибка: если токен неверный или отсутствует, бот не запустится. Решение: получить токен у @BotFather и не публиковать его в коде открыто.
Каким образом можно работать с базами данных?
Python поддерживает SQLite, PostgreSQL (через psycopg2), MySQL. Пример работы с SQLite.
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
c.execute("INSERT INTO users (name, age) VALUES ('Анна', 30)")
conn.commit()
for row in c.execute('SELECT * FROM users'):
print(row)
conn.close()
Проблема: если база данных заблокирована другим процессом, возникнет OperationalError. Решение: использовать режим WAL или закрывать соединения.
Как создать асинхронную программу для работы с сетью?
Модуль asyncio позволяет писать асинхронный код. Пример одновременного выполнения нескольких HTTP-запросов с помощью aiohttp.
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
urls = ['https://example.com', 'https://httpbin.org/get']
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
for html in results:
print(len(html))
asyncio.run(main())
Сложность: асинхронное программирование требует понимания работы event loop и coroutine. Решение: изучать основы asyncio на небольших примерах.
Расширенные примеры программ на Python
1. Парсинг сайта с постраничной навигацией и сохранением в CSV
Цель: собрать названия товаров с нескольких страниц интернет-магазина и сохранить в файл.
import requests
from bs4 import BeautifulSoup
import csv
def parse_page(url):
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(response.text, 'html.parser')
products = []
for item in soup.select('.product-name a'):
products.append(item.get_text(strip=True))
return products
def main():
base_url = 'https://example-shop.com/catalog?page='
all_products = []
for page in range(1, 6):
url = base_url + str(page)
products = parse_page(url)
all_products.extend(products)
print(f'Страница {page}: {len(products)} товаров')
with open('products.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['Название'])
for p in all_products:
writer.writerow([p])
print('Сохранено', len(all_products), 'товаров')
if __name__ == '__main__':
main()
Страница 1: 20 товаров Страница 2: 20 товаров ... Сохранено 100 товаров
2. Веб-приложение на Flask с формой обратной связи и отправкой email
Цель: создать небольшой сайт с формой, данные которой отправляются на почту администратору.
from flask import Flask, render_template, request, flash
import smtplib
from email.mime.text import MIMEText
app = Flask(__name__)
app.secret_key = 'supersecret'
def send_email(subject, body):
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = 'noreply@example.com'
msg['To'] = 'admin@example.com'
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login('user', 'pass')
server.send_message(msg)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
name = request.form['name']
message = request.form['message']
if not name or not message:
flash('Заполните все поля')
else:
send_email('Сообщение от ' + name, message)
flash('Сообщение отправлено')
return '''
<form method="post">
Имя: <input name="name"><br>
Сообщение: <textarea name="message"></textarea><br>
<input type="submit" value="Отправить">
</form>
{% with messages = get_flashed_messages() %}
{% for msg in messages %}
<p>{{ msg }}</p>
{% endfor %}
{% endwith %}
'''
if __name__ == '__main__':
app.run(debug=True)
(При запуске открывается браузер с формой; после отправки появляется flash-сообщение.)
3. Графический калькулятор на Tkinter с поддержкой операций +, -, *, /
Цель: показать полноценное GUI-приложение с обработкой ввода.
import tkinter as tk
from tkinter import messagebox
def calculate():
try:
num1 = float(entry1.get())
num2 = float(entry2.get())
op = operation.get()
if op == '+':
result = num1 + num2
elif op == '-':
result = num1 - num2
elif op == '*':
result = num1 * num2
elif op == '/':
if num2 == 0:
raise ZeroDivisionError
result = num1 / num2
else:
result = 'Неизвестная операция'
label_result.config(text=f'Результат: {result}')
except ValueError:
messagebox.showerror('Ошибка', 'Введите числа')
except ZeroDivisionError:
messagebox.showerror('Ошибка', 'Деление на ноль')
root = tk.Tk()
root.title('Калькулятор')
entry1 = tk.Entry(root, width=10)
entry1.grid(row=0, column=0, padx=5, pady=5)
operation = tk.StringVar(value='+')
op_menu = tk.OptionMenu(root, operation, '+', '-', '*', '/')
op_menu.grid(row=0, column=1, padx=5, pady=5)
entry2 = tk.Entry(root, width=10)
entry2.grid(row=0, column=2, padx=5, pady=5)
btn = tk.Button(root, text='=', command=calculate)
btn.grid(row=0, column=3, padx=5, pady=5)
label_result = tk.Label(root, text='Результат:')
label_result.grid(row=1, column=0, columnspan=4, pady=10)
root.mainloop()
(Отображается окно с двумя полями ввода, выпадающим списком операций и кнопкой; результат выводится ниже.)
4. Анализ данных с Pandas: чтение Excel, группировка, создание сводной таблицы
Цель: обработать данные о продажах из файла sales.xlsx и вывести суммарные продажи по категориям.
import pandas as pd
df = pd.read_excel('sales.xlsx', sheet_name='Sheet1')
print('Первые 5 строк:')
print(df.head())
# Группировка по категории
grouped = df.groupby('category')['amount'].sum()
print('\nСумма продаж по категориям:')
print(grouped)
# Сохранение сводной таблицы в новый Excel
with pd.ExcelWriter('summary.xlsx') as writer:
grouped.to_excel(writer, sheet_name='Summary')
print('\nСводка сохранена в summary.xlsx')
Первые 5 строк: category amount 0 Еда 150 1 Напитки 80 2 Еда 200 3 Одежда 300 4 Еда 120 Сумма продаж по категориям: category Еда 470 Напитки 80 Одежда 300 Name: amount, dtype: int64 Сводка сохранена в summary.xlsx
5. Простая нейронная сеть для распознавания рукописных цифр (MNIST) с использованием TensorFlow/Keras
Цель: обучить модель на датасете MNIST и проверить её точность.
import tensorflow as tf
from tensorflow import keras
import numpy as np
# Загрузка данных
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0 # нормализация
# Построение модели
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Обучение (для краткости только 2 эпохи)
model.fit(x_train, y_train, epochs=2, validation_data=(x_test, y_test))
# Оценка
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f'\nТочность на тестовых данных: {test_acc:.4f}')
Epoch 1/2 1875/1875 [==============================] - 4s 2ms/step - loss: 0.2980 - accuracy: 0.9136 - val_loss: 0.1457 - val_accuracy: 0.9563 Epoch 2/2 1875/1875 [==============================] - 3s 2ms/step - loss: 0.1405 - accuracy: 0.9580 - val_loss: 0.1109 - val_accuracy: 0.9660 313/313 - 0s - loss: 0.1109 - accuracy: 0.9660 Точность на тестовых данных: 0.9660
6. Telegram-бот для конвертации валют с использованием API
Цель: бот, который по запросу пользователя показывает курс выбранной валюты.
import requests
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
def start(update: Update, context: CallbackContext):
update.message.reply_text('Отправьте код валюты, например USD')
def get_rate(update: Update, context: CallbackContext):
currency = update.message.text.upper()
url = f'https://api.exchangerate-api.com/v4/latest/{currency}'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
rub = data['rates'].get('RUB')
if rub:
update.message.reply_text(f'1 {currency} = {rub} RUB')
else:
update.message.reply_text('Валюта не найдена')
else:
update.message.reply_text('Ошибка получения данных')
updater = Updater('ТОКЕН', use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start', start))
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, get_rate))
updater.start_polling()
updater.idle()
(Пользователь пишет USD, бот отвечает: 1 USD = 73.45 RUB)