{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#| default_exp deck" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Deck\n", "> A deck of cards" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#| hide\n", "from nbdev.showdoc import *" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#| export\n", "from fastai_learning.card import *\n", "from fastcore.test import *\n", "from fastcore.utils import *\n", "from random import random" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class Deck:\n", " def __init__(self):\n", " self.cards = [Card(suit, rank) for suit in range(4) for rank in range(1, 14)]\n", " def __str__(self):\n", " return '|'.join([str(card) for card in self.cards])\n", " def __len__(self):\n", " return len(self.cards)\n", " def __contains__(self, card):\n", " return card in self.cards\n", " __repr__ = __str__\n", " def shuffle(self):\n", " \"\"\"shuffles the cards in this deck\"\"\"\n", " random.shuffle(self.cards)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a reminder, these are the ranks and suits:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": "['♦️', '♣️', '♥️', '♣️']" }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "suits" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "deck = Deck()\n", "test_eq(len(deck), 52)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": "True" }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Card(2, 2) in deck" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2♥️\n" ] } ], "source": [ "print(Card(2, 2))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#| export\n", "@patch\n", "def pop(\n", " self: Deck,\n", " idx: int = -1 # index of card to remove, default to last card\n", "):\n", " \"\"\"Remove one card from the deck\"\"\"\n", " return self.cards.pop(idx)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "deck = Deck()\n", "test_eq(deck.pop(), Card(3, 13))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": "---\n\n### Deck.shuffle\n\n> Deck.shuffle ()\n\nshuffles the cards in this deck", "text/plain": "---\n\n### Deck.shuffle\n\n> Deck.shuffle ()\n\nshuffles the cards in this deck" }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(Deck.shuffle)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "python3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 0 }