Skip to content

Commit b1bc76f

Browse files
committed
Chapter 6
1 parent 1f8dc1c commit b1bc76f

14 files changed

Lines changed: 263 additions & 0 deletions

Ch6/addition_lambda.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
add = lambda x, y: x + y
2+
answer = add(20, 22)
3+
print(answer) # outputs "42"

Ch6/dice_cup_closure.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import random
2+
3+
4+
def make_dice_cup(sides=6, dice=1):
5+
def roll():
6+
return tuple(random.randint(1, sides) for _ in range(dice))
7+
8+
return roll
9+
10+
11+
roll_for_damage = make_dice_cup(sides=8, dice=5)
12+
damage = roll_for_damage()
13+
print(damage)

Ch6/dice_cup_closure_recursive.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import random
2+
3+
4+
def make_dice_cup(sides=6, dice=1):
5+
def roll(dice=dice):
6+
# nonlocal dice
7+
if dice < 1:
8+
return ()
9+
die = random.randint(1, sides)
10+
dice -= 1
11+
return (die, ) + roll(dice - 1)
12+
13+
return roll
14+
15+
16+
roll_for_damage = make_dice_cup(sides=8, dice=5)
17+
damage = roll_for_damage()
18+
print(damage)
19+
20+
damage = roll_for_damage()
21+
print(damage)

Ch6/dice_roll.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import random
2+
import typing
3+
4+
TupleInts = typing.Tuple[int, ...]
5+
6+
7+
def roll_dice(sides: int = 6, dice: int = 1) -> TupleInts:
8+
# return random.randint(1, sides)
9+
return tuple(random.randint(1, sides) for _ in range(dice))
10+
11+
12+
print("Roll for initiative...")
13+
# player1 = roll_dice(20)
14+
# player2 = roll_dice(20)
15+
player1, player2 = roll_dice(20, 2)
16+
if player1 >= player2:
17+
print(f"Player 1 goes first (rolled {player1}).")
18+
else:
19+
print(f"Player 2 goes first (rolled {player2}).")
20+
21+
# dice_cup = roll_dice(6, 5)
22+
# dice_cup = roll_dice(sides=6, dice=5)
23+
# dice_cup = roll_dice(dice=5, sides=6)
24+
# dice_cup = roll_dice(dice=5)
25+
dice_cup = roll_dice(6, dice=5)

Ch6/dice_roll_keyword_only.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from dbm import dumb
2+
import random
3+
4+
5+
def roll_dice(*, sides=6, dice=1):
6+
return tuple(random.randint(1, sides) for _ in range(dice))
7+
8+
9+
dice_cup = roll_dice(sides=6, dice=5)
10+
print(dice_cup)
11+
12+
dice_cup = roll_dice(6, 5) # raises TypeError
13+
print(dice_cup)

Ch6/dice_roll_positional_only.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import random
2+
3+
import random
4+
5+
6+
def roll_dice(dice=1, /, sides=6):
7+
return tuple(random.randint(1, sides) for _ in range(dice))
8+
9+
10+
roll_dice(4, 20) # OK; dice=4, sides=20
11+
roll_dice(4) # OK; dice=4, sides=6
12+
roll_dice(sides=20) # OK; dice=1, sides=20
13+
roll_dice(4, sides=20) # OK; dice=4, sides 20
14+
15+
roll_dice(dice=4) # TypeError
16+
roll_dice(dice=4, sides=20) # TypeError

Ch6/dice_roll_recursive.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import random
2+
3+
4+
def roll_dice(sides, dice):
5+
if dice < 1:
6+
return ()
7+
roll = random.randint(1, sides)
8+
return (roll, ) + roll_dice(sides, dice-1)
9+
10+
11+
dice_cup = roll_dice(6, 5)
12+
print(dice_cup)

Ch6/dice_roll_turns.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import random
2+
from tracemalloc import start
3+
4+
5+
def start_turn(limit, dice=5, sides=6):
6+
def roll():
7+
nonlocal limit
8+
if limit < 1:
9+
return None
10+
limit -= 1
11+
return tuple(random.randint(1, sides) for _ in range(dice))
12+
13+
return roll
14+
15+
16+
turn1 = start_turn(limit=3)
17+
while toss := turn1():
18+
print(toss)
19+
20+
turn2 = start_turn(limit=3)
21+
while toss := turn2():
22+
print(toss)

Ch6/dice_roll_variadic.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import random
2+
3+
4+
def roll_dice(*dice):
5+
# return tuple(random.randint(1, d) for d in dice)
6+
if dice:
7+
roll = random.randint(1, dice[0])
8+
return (roll,) + roll_dice(*dice[1:])
9+
return ()
10+
11+
12+
dice_cup = roll_dice(6, 6, 6, 6, 6)
13+
print(dice_cup)
14+
15+
bunch_o_dice = roll_dice(20, 6, 8, 4)
16+
print(bunch_o_dice)

Ch6/fibonacci.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# def fibonacci_next(series=[1, 1]):
2+
def fibonacci_next(series=None):
3+
if series is None:
4+
series = [1, 1]
5+
series.append(series[-1] + series[-2])
6+
return series
7+
8+
9+
fib1 = fibonacci_next()
10+
print(fib1) # prints [1, 1, 2]
11+
fib1 = fibonacci_next(fib1)
12+
print(fib1) # prints [1, 1, 2, 3]
13+
14+
fib2 = fibonacci_next()
15+
print(fib2) # should be [1, 1, 2] riiiiight?

0 commit comments

Comments
 (0)