Functionalities for playing cards
Project description
cardspy
A Python library for modeling and manipulating playing cards, decks, suits, and ranks. Provides utilities for games, simulations, and card-based logic.
Features
- Full 52-card deck modeling
- Card, Suit, and Rank objects with rich properties
- Deck operations: shuffle, deal, add/remove cards, reset, clear
- Bitmask utilities for efficient card set operations
- 100% test coverage
Installation
pip install cardspy
Quick Start
from cardspy.deck import Deck
from cardspy.card import Card, C2C, C3D, sort_cards, cards_mask, extract_cards, rank_mask_from_cards
from cardspy.suit import CLUB, DIAMOND, HEART, SPADE
from cardspy.rank import R2, R3, R4, R5, R6, R7, R8, R9, RT, RJ, RQ, RK, RA
# Create a new deck
deck = Deck()
print(f"Deck has {deck.count()} cards") # 52
# Shuffle and deal 5 cards
deck.shuffle()
cards_mask_val = deck.deal_cards(5) # Bitmask of 5 cards
dealt_cards = extract_cards(cards_mask_val)
print("Dealt:", [str(card) for card in dealt_cards])
# Remove a card
deck.remove_card(C2C.key)
print(deck.contains(C2C.key)) # False
# Add a card back
deck.add_card(C2C.key)
print(deck.contains(C2C.key)) # True
# Sort cards
sorted_cards = sort_cards(dealt_cards)
print("Sorted:", [str(card) for card in sorted_cards])
# Bitmask utilities
mask = cards_mask([C2C, C3D])
print(mask)
print(extract_cards(mask))
print(rank_mask_from_cards(mask))
API Reference
Card
Card(key, rank, suit, code, name, symbol)- Predefined constants:
C2C,C2D, ...,CAS(all 52 cards) - Methods:
__str__(),__repr__()
Suit
Suit(key, code, name, symbol)- Predefined:
CLUB,DIAMOND,HEART,SPADE
Rank
Rank(key, code, name)- Predefined:
R2,R3, ...,RA
Deck
Deck()— creates a new deck (full 52 cards)deck.shuffle()— shuffle deckdeck.clear()— remove all cardsdeck.reset()— restore to full deckdeck.count()— number of cardsdeck.get_cards()— list ofCardobjects in deckdeck.add_card(card_key)— add a card by keydeck.add_cards(cards_key)— add multiple cards by bitmaskdeck.remove_card(card_key)— remove a card by keydeck.remove_cards(cards_key)— remove multiple cards by bitmaskdeck.deal_cards(count, shuffle=True)— deal N cards, returns bitmaskdeck.deal_specific_card(card_key)— deal a specific carddeck.deal_specific_cards(cards_key)— deal specific cards by bitmaskdeck.contains(card_key)— check if card is present
Utility Functions (in cardspy.card)
sort_cards(cards)— sort by rankcards_mask(cards)— get bitmask from list of cardsextract_cards(mask)— get list of cards from bitmaskextract_cards_key(mask)— get list of card keys from bitmaskrank_mask_from_cards(mask)— get rank bitmask from card bitmaskget_card(card_code)— get aCardby its two-character codeget_card_key_from_code(card_code)— get the key (int) of a card by its codeget_cards(card_codes)— get a list ofCardobjects from a list of codesget_card_keys_from_codes(card_codes)— get bitmask (int) from a list of codes
from cardspy.card import get_card, get_card_key_from_code, get_cards, get_card_keys_from_codes
# Get a single card
card = get_card('AS')
print(card) # AS
# Get card key
key = get_card_key_from_code('10H')
print(key) # integer key for 10 of Hearts
# Get multiple cards
cards = get_cards(['2C', 'KD', 'JH'])
print(cards) # [C2C, CKD, CJH]
# Get bitmask from card codes
keys_mask = get_card_keys_from_codes(['2C', 'KD', 'JH'])
print(keys_mask) # bitmask representing those cards
Example: Poker Hand Evaluation
from cardspy.card import C2C, C3C, C4C, C5C, C6C, cards_mask, extract_cards
# Create a straight flush
hand = [C2C, C3C, C4C, C5C, C6C]
mask = cards_mask(hand)
print("Hand mask:", mask)
print("Extracted:", extract_cards(mask))
Testing
To run the tests and check coverage:
pytest --cov=cardspy --cov-report=term-missing
License
MIT
For more details, see the source code and tests in the cardspy and tests directories.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cardspy-2.0.0.tar.gz
(7.0 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cardspy-2.0.0.tar.gz.
File metadata
- Download URL: cardspy-2.0.0.tar.gz
- Upload date:
- Size: 7.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.10.12 Darwin/24.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f29131cb1b2a57cf91c24061bd47d9dc943f1a103207fab56b37801d9bf0b3cd
|
|
| MD5 |
5c0611d3b2d71e257e67ad4717543c15
|
|
| BLAKE2b-256 |
6609546945ca4b4f9d9214d1535961f6eb22594659d6e3e3d86b1c080fd4b294
|
File details
Details for the file cardspy-2.0.0-py3-none-any.whl.
File metadata
- Download URL: cardspy-2.0.0-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.10.12 Darwin/24.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3b57194e8dfa6705636705569c7a3baea367ebb27f883c84d7a946ae4fbe0e8
|
|
| MD5 |
3103770c47db605ab419501b63be0e77
|
|
| BLAKE2b-256 |
da5be9b77074a620ccacb609f8293a6966aafa8826d38130831d8ca799907036
|