Хотите создать собственный цифровой «оракул», который будет «тянуть» карты Таро прямо на экране вашего компьютера? Ниже вы найдёте полностью рабочий, легко расширяемый скрипт на Python 3.12+, который:
- содержит 22 Старших аркана и 56 Младших;
- перемешивает колоду случайным образом;
- выполняет расклад «карта дня» или «кельтский крест»;
- выводит результаты в консоль и (по желанию) сохраняет их в файл.
Установка окружения
Убедитесь, что у вас установлена Python 3.12.x (или самая свежая из стабильных веток).
Дополнительных библиотек требуется всего одна, rich, для красивого цветного вывода:
pip install rich Структура проекта
tarot_bot/ ├── tarot.py # главный файл ├── deck.json # описание колоды └── history.txt # журнал раскладов (создается автоматически)
deck.json
Файл содержит всю «мета-информацию» о картах: название, аркан (старший/младший), ключевые слова, перевёрнутое значение.
{
"cards": [
{
"name": "Шут",
"arcana": "major",
"upright_keywords": ["начало", "спонтанность", "свобода"],
"reversed_keywords": ["безрассудство", "риск", "ограничения"]
},
...
]
} Полный код tarot.py
#!/usr/bin/env python3
"""
Простой электронный оракул на картах Таро.
Поддерживает расклады:
- 'daily' — Карта дня
- 'cc' — Кельтский крест (10 карт)
"""
import json, random, datetime
from pathlib import Path
from rich.console import Console
from rich.text import Text
console = Console
class TarotDeck:
"""Класс колоды Таро."""
def __init__(self, deck_file='deck.json'):
self.cards = json.loads(Path(deck_file).read_text(encoding='utf-8'))['cards']
self._reset
def _reset(self):
self.deck = self.cards.copy
random.shuffle(self.deck)
def draw(self, n=1):
"""Вытянуть n карт."""
if n > len(self.deck):
self._reset
drawn = self.deck[:n]
self.deck = self.deck[n:]
return drawn
class Reading:
"""Один расклад."""
def __init__(self, spread='daily'):
self.spread = spread
self.timestamp = datetime.datetime.now.strftime('%Y-%m-%d %H:%M:%S')
self.deck = TarotDeck
self.positions = self._get_positions
self.cards = self.deck.draw(len(self.positions))
def _get_positions(self):
if self.spread == 'daily':
return ['Карта дня']
elif self.spread == 'cc':
return [
'Прошлое', 'Настоящее', 'Будущее',
'Причина', 'Надежды/страхи', 'Внешнее влияние',
]
else:
raise ValueError('Неизвестный расклад')
def _orientation(self):
# 50 % шанс перевёрнутой карты
return 'Перевёрнута' if random.random < 0.5 else 'Прямая'
def show(self):
table = []
for pos, card in zip(self.positions, self.cards):
orientation = self._orientation
keywords = ', '.join(
card['reversed_keywords'] if orientation == 'Перевёрнута'
else card['upright_keywords']
)
line = f"{pos}: {card['name']} ({orientation}) — {keywords}"
table.append(line)
console.print(Text(line, style='bold cyan'))
self._save(table)
def _save(self, lines):
with open('history.txt', 'a', encoding='utf-8') as f:
f.write(f"
[{self.timestamp}] Расклад: {self.spread}
")
f.write('
'.join(lines) + '
')
def main:
console.print("🌙 Добро пожаловать в цифровой оракул Таро!", style='bold magenta')
console.print("1 ⎯ Карта дня
2 ‒ Кельтский крест")
choice = input("Выберите расклад (1/2) > ").strip
spread = 'daily' if choice == '1' else 'cc'
reading = Reading(spread)
reading.show
if __name__ == '__main__':
main
Как запустить
- Склонируйте или скачайте файлы в папку
tarot_bot. - Перейдите в папку терминалом:
cd tarot_bot - Установите зависимость:
pip install rich - Запустите:
python tarot.py
Расширения и идеи
- Telegram-бот. Используйте библиотеку
python-telegram-botи запустите расклады в мессенджере. - Визуализация. Добавьте PNG-изображения карт и отображайте их через
matplotlibилиtkinter. - Голосовой интерфейс. Синтез речи через
pyttsx3или онлайн TTS-сервисы. - Аналитика. Сохраняйте расклады в SQLite и стройте графики «какие карты выпадают чаще всего».
Всего меньше ста строк кода — и у вас работающий персональный таролог!
Программа легко подстраивается под любые колоды (Райдера-Уэйта, Таро Тота, Манара) и расклады (три карты, «звезда», «отношения»).
Экспериментируйте, добавляйте свои трактовки и делитесь результатами с друзьями.
Удачных вам открытий в мире Таро и Python!