Гадалка на Python от консольного варианта до веб‑интерфейса

Гадалка – это небольшое приложение, которое «читает» судьбу, отвечает на вопросы и развлекает пользователя. В этой статье мы разберём, как написать свою гадалку на языке Python, от простого консольного варианта до веб‑интерфейса с красивой графикой.


Содержание

  1. Что такое «гадалка» в программировании?
  2. Требования и инструменты
  3. Консольный вариант: шаг за шагом
  4. Графический интерфейс (Tkinter)
  5. Веб‑гадалка на Flask
  6. Расширения: карты Таро, астрология, нейросети
  7. Развёртывание и распространение

Что такое «гадалка» в программировании?

В контексте программирования гадалка – это приложение, которое генерирует ответы на вопросы пользователя, используя:

  • случайный выбор из заранее подготовленного набора фраз;
  • алгоритмический анализ (например, простая нумерология);
  • внешние 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

Как запустить

  1. Сохраните код в файл gadalka_cli.py.
  2. Убедитесь, что answers.txt находится в той же папке.
  3. В терминале выполните 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)

<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>

Запуск веб‑гадалки

  1. Перейдите в папку проекта.
  2. Запустите python3 app.py.
  3. Откройте браузер и перейдите по адресу 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.

  1. Создайте requirements.txt:
    Flask==3.0.0
     gunicorn==21.2.0
     
  2. Добавьте файл Procfile (для Heroku):
    web: gunicorn app:app
     
  3. Запушьте репозиторий и следуйте инструкциям выбранного хостинга.

Распространение GUI‑версии

Для Windows удобно собрать исполняемый файл с помощью PyInstaller:

pip install pyinstaller
pyinstaller --onefile --windowed gadalka_gui.py

Полученный .exe можно разместить в любой папке или упаковать в установщик (Inno Setup).


Создать «гадалку» на Python – это отличная возможность попрактиковаться в работе с:

  • встроенными модулями (random, tkinter);
  • внешними API (астрология, Таро, GPT‑модели);
  • упаковкой и деплоем приложений.

Независимо от того, нужен вам простой консольный скрипт или полноценный веб‑сервис, базовый принцип остаётся тем же – случайный (или «умный») выбор предсказания и приятный пользовательский интерфейс.

Удачной разработки и пусть ваша гадалка приносит радость пользователям!