games
===========
guess the number
---------------------
.. code-block:: python
import random
def play():
num, atmps = random.randint(1, 1000), 0
while True:
atmps += 1
guess = int(input("Your guess "))
if num == guess : print(f"you win. {atmps} attempts"); return
x = "too high" if guess > num else "too low"
print(x)
Guess a number is a classic game which we can play by entering the number in the terminal. The game keeps on going
until you have guessed the correct number. Based on the input value you will get a prompt 'too low' or 'too high'
will you've guess the number correctly.
.. code-block:: ipython
In [22]: play()
Your guess 500
too low
Your guess 750
too high
Your guess 625
too low
Your guess 700
too high
Your guess 650
too high
Your guess 635
too high
Your guess 630
too high
Your guess 627
you win. 8 attempts
get a shuffled deck of cards
-----------------------------------
.. code-block:: python
import random, itertools
def shuffled_deck():
deck = list(
itertools.product("♠♣♥♦♤♧♢♡", "AKQJ🔟98765432")
)
random.shuffle(deck)
return "\n".join([f"{n} of {suit}" for suit, n in deck])
For every card game, the card deck should be well shuffled. The program above does that for us.
:code:`itertools.product()` returns a deck of cards as a list of tuples. Each tuple have suit and rank :code:`('♠', 'A')`.
:code:`random.shuffle()` shuffles the deck of cards and returns it.
Draw a single card
-----------------------------------
.. code-block:: python
import random, itertools
def shuffled_deck():
deck = list(
itertools.product("♠♣♥♦♤♧♢♡", "AKQJ🔟98765432")
)
return random.choice(deck)
.. code-block:: bash
In [1]: import random, itertools
...: def draw_card():
...: deck = list(
...: itertools.product("♠♣♥♦♤♧♢♡", "AKQJ🔟98765432")
...: )
...: suit, n = random.choice(deck)
...: return f"{n} of {suit}"
...:
In [2]: draw_card()
Out[2]: '5 of ♧'
In [3]: draw_card()
Out[3]: '🔟 of ♧'
In [4]: draw_card()
Out[4]: '5 of ♡'
As explained in the above example, a deck is created and shuffled randomly. :code:`random.choice()` selects a random
card out of the deck.
Roll a d20 dice
-------------------
.. code-block:: bash
python -c "import random;print(random.choice(range(1,21)))"
D20 dice has 20 faces with numbers from 1 to 20. range(1,21) generates a list of number from 1 to 20.
:code:`random.choice` randomly get the value from the list.