Программы на Python: от скриптов до искусственного интеллекта

Раздел: Общие вопросы программирования -> Возможности 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)

Какие программы можно написать на Python - comments

En
какие программы можно написать на python (python)