Гадалка – это небольшое приложение, которое «читает» судьбу, отвечает на вопросы и развлекает пользователя. В этой статье мы разберём, как написать свою гадалку на языке Python, от простого консольного варианта до веб‑интерфейса с красивой графикой.
Содержание
- Что такое «гадалка» в программировании?
- Требования и инструменты
- Консольный вариант: шаг за шагом
- Графический интерфейс (Tkinter)
- Веб‑гадалка на Flask
- Расширения: карты Таро, астрология, нейросети
- Развёртывание и распространение
Что такое «гадалка» в программировании?
В контексте программирования гадалка – это приложение, которое генерирует ответы на вопросы пользователя, используя:
- случайный выбор из заранее подготовленного набора фраз;
- алгоритмический анализ (например, простая нумерология);
- внешние API (астрологические, Таро и т.п.).
Главная цель – создать ощущение «магии» и интерактивности, при этом код остаётся полностью открытым и безопасным.
Требования и инструменты
Для начала нам понадобится:
- Python 3.9+ (рекомендовано последняя стабильная версия).
- Текстовый редактор или IDE (VS Code, PyCharm, Sublime Text).
- Библиотеки:
random– встроенный модуль для случайного выбора.tkinter– для графического интерфейса (входит в стандартную библиотеку).flask– лёгкий веб‑фреймворк (устанавливается черезpip install flask).- Опционально:
requestsдля обращения к внешним API.
Консольный вариант: шаг за шагом
Подготовка набора предсказаний
Создадим файл answers.txt со списком фраз (пример – 20 строк):
Любовь придёт, когда ты перестанешь её искать.
Сегодня удачный день для новых начинаний.
Будь осторожен с финансовыми вложениями.
Твоя интуиция подскажет правильный путь.
Скоро ты получишь важное сообщение.
...
Основной скрипт
Ниже полная программа, которая читает файл, задаёт вопрос пользователю и выдаёт случайный ответ.
#!/usr/bin/env python3
import random
import sys
import os
def load_answers(path: str) -> list:
"""Считывает строки из файла и возвращает список предсказаний."""
if not os.path.exists(path):
print(f"Файл {path} не найден!", file=sys.stderr)
sys.exit(1)
with open(path, encoding='utf-8') as f:
return [line.strip for line in f if line.strip]
def ask_question -> str:
"""Запрашивает вопрос у пользователя."""
print("Задай свой вопрос (или нажми Enter, чтобы выйти):")
return input("> ").strip
def main:
answers = load_answers('answers.txt')
print("=== Добро пожаловать в консольную гадалку! ===")
while True:
question = ask_question
if not question:
print("Прощай, ищущий истины!")
break
# Можно добавить простую проверку на длину вопроса
if len(question) < 3:
print("Слишком коротко... Попробуй задать более конкретный вопрос.")
continue
prediction = random.choice(answers)
print(f"
🔮 Твой вопрос: {question}")
print(f"🗣️ Ответ: {prediction}
")
if __name__ == '__main__':
main
Как запустить
- Сохраните код в файл
gadalka_cli.py. - Убедитесь, что
answers.txtнаходится в той же папке. - В терминале выполните
python3 gadalka_cli.py.
Готово! Вы получили простую, но работающую консольную гадалку.
Графический интерфейс (Tkinter)
Почему Tkinter?
Tkinter – кроссплатформенный модуль, входящий в стандартную библиотеку Python. Он позволяет быстро собрать окно с кнопками, полем ввода и выводом текста без установки дополнительных пакетов.
Полный пример
#!/usr/bin/env python3
import tkinter as tk
from tkinter import messagebox
import random
import os
def load_answers(file_path):
if not os.path.exists(file_path):
raise FileNotFoundError(f"Файл {file_path} не найден")
with open(file_path, encoding='utf-8') as f:
return [line.strip for line in f if line.strip]
ANSWERS = load_answers('answers.txt')
def predict:
question = entry_question.get.strip
if not question:
messagebox.showwarning("Внимание", "Введите вопрос!")
return
answer = random.choice(ANSWERS)
lbl_answer['text'] = f"🔮 {answer}"
root = tk.Tk
root.title("Гадалка на Python")
root.geometry("400x250")
root.resizable(False, False)
lbl_title = tk.Label(root, text="Задай вопрос и получи предсказание", font=("Helvetica", 14))
lbl_title.pack(pady=10)
frame_input = tk.Frame(root)
frame_input.pack(pady=5)
lbl_question = tk.Label(frame_input, text="Вопрос:")
lbl_question.pack(side=tk.LEFT)
entry_question = tk.Entry(frame_input, width=30)
entry_question.pack(side=tk.LEFT, padx=5)
btn_predict = tk.Button(root, text="Гадать!", command=predict, bg="#4CAF50", fg="white")
btn_predict.pack(pady=10)
lbl_answer = tk.Label(root, text="", font=("Helvetica", 12), wraplength=350, justify="center")
lbl_answer.pack(pady=20)
root.mainloop
Что делает код?
- Загружает предсказания из
answers.txt. - Создаёт простое окно с полем ввода и кнопкой.
- При нажатии кнопки выбирает случайный ответ и выводит его.
Запуск аналогичен консольному варианту: python3 gadalka_gui.py.
Веб‑гадалка на Flask
Почему Flask?
Flask – микрофреймворк, позволяющий быстро развернуть веб‑приложение. Пользователь может задавать вопросы через браузер, а сервер будет возвращать предсказание.
Установка
pip install flask
Структура проекта
gadalka_web/
│
├─ app.py # основной скрипт Flask
├─ templates/└─ answers.txt # список предсказаний
Файл app.py
#!/usr/bin/env python3
from flask import Flask, render_template, request, jsonify
import random
import os
app = Flask(__name__)
def load_answers:
path = os.path.join(os.path.dirname(__file__), 'answers.txt')
with open(path, encoding='utf-8') as f:
return [line.strip for line in f if line.strip]
ANSWERS = load_answers
@app.route('/', methods=['GET'])
def index:
@app.route('/predict', methods=['POST'])
def predict:
data = request.get_json
question = data.get('question', '').strip
if not question:
return jsonify({'error': 'Empty question'}), 400
answer = random.choice(ANSWERS)
return jsonify({'question': question, 'answer': answer})
if __name__ == '__main__':
app.run(debug=True)
gadalka_web/
│
├─ app.py # основной скрипт Flask
├─ templates/└─ answers.txt # список предсказаний
app.py#!/usr/bin/env python3
from flask import Flask, render_template, request, jsonify
import random
import os
app = Flask(__name__)
def load_answers:
path = os.path.join(os.path.dirname(__file__), 'answers.txt')
with open(path, encoding='utf-8') as f:
return [line.strip for line in f if line.strip]
ANSWERS = load_answers
@app.route('/', methods=['GET'])
def index:
@app.route('/predict', methods=['POST'])
def predict:
data = request.get_json
question = data.get('question', '').strip
if not question:
return jsonify({'error': 'Empty question'}), 400
answer = random.choice(ANSWERS)
return jsonify({'question': question, 'answer': answer})
if __name__ == '__main__':
app.run(debug=True)
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Веб‑гадалка на Python</title>
<style>
body {font-family: Arial, sans-serif; max-width: 600px; margin: 40px auto;}
.container {text-align: center;}
input[type="text"] {width: 80%; padding: 8px; margin: 10px 0;}
button {padding: 10px 20px; background:#4CAF50; color:#fff; border:none; cursor:pointer;}
.answer {margin-top: 20px; font-size: 1.2em; color:#333;}
</style>
</head>
<body>
<div class="container">
<h1>Гадалка онлайн</h1>
<p>Введите ваш вопрос и нажмите «Гадать!».</p>
<input type="text" id="question" placeholder="Ваш вопрос..."><br>
<button onclick="makePrediction">Гадать!</button>
<div class="answer" id="result"></div>
</div>
<script>
async function makePrediction {
const q = document.getElementById('question').value.trim;
if (!q) {
alert('Введите вопрос!');
return;
}
const response = await fetch('/predict', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({question: q})
}); const data = await response.json;
if (response.ok) { } else { }
}
</script>
</body>
Запуск веб‑гадалки
- Перейдите в папку проекта.
- Запустите
python3 app.py. - Откройте браузер и перейдите по адресу
http://127.0.0.1:5000/.
Теперь у вас есть полностью работающая веб‑гадалка!
Расширения: карты Таро, астрология, нейросети
Карты Таро
Для более «мистической» версии можно добавить набор из 78 карт Таро. Каждый запрос будет возвращать случайную карту с описанием.
- Создайте файл
tarot.jsonсо структурой:{ "The Fool": "Новые начала, спонтанность, свобода.", "The Magician": "Воля, мастерство, действие.", ... } - В коде замените
random.choice(ANSWERS)наrandom.choice(list(TAROT.keys))и выводите описание.
Астрологический модуль
Можно подключить бесплатный API, например Aztro, который выдаёт гороскопы.
import requests
def get_horoscope(sign: str) -> str:
url = "https://aztro.sameerkumar.website/?sign={}&day=today".format(sign.lower)
response = requests.post(url)
if response.ok:
data = response.json
return data.get('description', 'Нет данных')
return "Ошибка получения гороскопа"
В консольной версии спросите у пользователя знак зодиака и выведите гороскоп вместо случайного текста.
Нейросети и GPT‑модели
Для «умной» гадалки можно использовать OpenAI API (или локальную модель) и генерировать ответы на естественном языке.
import openai
openai.api_key = "YOUR_API_KEY"
def smart_predict(question: str) -> str:
prompt = f"Ты — мистический провидец. Ответь на вопрос: {question}"
response = openai.Completion.create(
engine="gpt-4o-mini",
prompt=prompt,
max_tokens=60,
temperature=0.8,
)
return response.choices[0].text.strip
Внимание: такие запросы требуют оплаты и соблюдения политики использования.
Развёртывание и распространение
Пакетирование консольного скрипта
Для удобной установки можно собрать пакет с setuptools и опубликовать его в PyPI.
# setup.py
from setuptools import setup, find_packages
setup(
name='gadalka',
version='1.0.0',
packages=find_packages,
py_modules=['gadalka_cli'],
entry_points={'console_scripts': ['gadalka=gadalka_cli:main']},
install_requires=[],
description='Простая консольная гадалка на Python',
long_description=open('README.md', encoding='utf-8').read,
long_description_content_type='text/markdown',
python_requires='>=3.9',
) После публикации пользователи смогут установить гадалку командой pip install gadalka и запускать gadalka.
Деплой веб‑версии
Для публичного доступа разместите приложение на Heroku, Render, Railway или любой VPS.
- Создайте
requirements.txt:Flask==3.0.0 gunicorn==21.2.0 - Добавьте файл
Procfile(для Heroku):web: gunicorn app:app - Запушьте репозиторий и следуйте инструкциям выбранного хостинга.
Распространение GUI‑версии
Для Windows удобно собрать исполняемый файл с помощью PyInstaller:
pip install pyinstaller
pyinstaller --onefile --windowed gadalka_gui.py
Полученный .exe можно разместить в любой папке или упаковать в установщик (Inno Setup).
Создать «гадалку» на Python – это отличная возможность попрактиковаться в работе с:
- встроенными модулями (
random,tkinter); - внешними API (астрология, Таро, GPT‑модели);
- упаковкой и деплоем приложений.
Независимо от того, нужен вам простой консольный скрипт или полноценный веб‑сервис, базовый принцип остаётся тем же – случайный (или «умный») выбор предсказания и приятный пользовательский интерфейс.
Удачной разработки и пусть ваша гадалка приносит радость пользователям!