Skip to content

Commit 5906202

Browse files
committed
Chapter 9
1 parent 0454f3c commit 5906202

37 files changed

Lines changed: 481 additions & 0 deletions

Ch9/average_orders.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
orders_per_day = [56, 41, 49, 22, 71, 43, 18]
2+
average_orders = sum(orders_per_day) // len(orders_per_day)
3+
print(average_orders)

Ch9/brew_map.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
orders = ['cold brew', 'lemongrass tea', 'chai latte', 'medium drip',
2+
'french press', 'mocha cappuccino', 'pumpkin spice latte',
3+
'double-shot espresso', 'dark roast drip', 'americano']
4+
5+
6+
def brew(order):
7+
print(f"Making {order}...")
8+
return order
9+
10+
11+
for order in map(brew, orders):
12+
print(f"One {order} is ready!")

Ch9/cafequeue.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
class CafeQueue:
2+
3+
def __init__(self):
4+
self._queue = []
5+
self._orders = {}
6+
self._togo = {}
7+
8+
def __iter__(self):
9+
return CafeQueueIterator(self)
10+
11+
def add_customer(self, customer, *orders, to_go=True):
12+
self._queue.append(customer)
13+
self._orders[customer] = tuple(orders)
14+
self._togo[customer] = to_go
15+
16+
def __len__(self):
17+
return len(self._queue)
18+
19+
def __contains__(self, customer):
20+
return (customer in self._queue)
21+
22+
23+
class CafeQueueIterator:
24+
25+
def __init__(self, cafe_queue):
26+
self._cafe = cafe_queue
27+
self._position = 0
28+
29+
def __next__(self):
30+
try:
31+
customer = self._cafe._queue[self._position]
32+
except IndexError:
33+
raise StopIteration
34+
35+
orders = self._cafe._orders[customer]
36+
togo = self._cafe._orders[customer]
37+
self._position += 1
38+
39+
return (customer, orders, togo)
40+
41+
def __iter__(self):
42+
return self
43+
44+
45+
queue = CafeQueue()
46+
queue.add_customer('Newman', 'tea', 'tea', 'tea', 'tea', to_go=False)
47+
queue.add_customer('James', 'medium roast drip, milk, 2 sugar substitutes')
48+
queue.add_customer('Glen', 'americano, no sugar, heavy cream')
49+
queue.add_customer('Jason', 'pumpkin spice latte', to_go=False)
50+
51+
print(len(queue)) # prints 4
52+
print('Glen' in queue) # prints True
53+
print('Kyle' in queue) # prints False
54+
55+
56+
def brew(order):
57+
print(f"(Making {order}...)")
58+
return order
59+
60+
61+
for customer, orders, to_go in queue:
62+
for order in orders: brew(order)
63+
if to_go:
64+
print(f"Order for {customer}!")
65+
else:
66+
print(f"(Takes order to {customer})")

Ch9/checkout_dict_eafp.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
menu = {'drip': 1.95, 'cappuccino': 2.95, 'americano': 2.49}
2+
3+
4+
def checkout(order):
5+
try:
6+
print(f"Your total is {menu[order]}")
7+
except KeyError:
8+
print("That item is not on the menu.")
9+
10+
11+
checkout("drip") # prints "Your total is 1.95"
12+
checkout("tea") # prints "That item is not on the menu."

Ch9/checkout_dict_lbyl.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
menu = {'drip': 1.95, 'cappuccino': 2.95, 'americano': 2.49}
2+
3+
4+
def checkout(order):
5+
if order in menu:
6+
print(f"Your total is {menu[order]}")
7+
else:
8+
print("That item is not on the menu.")
9+
10+
11+
checkout("drip") # prints "Your total is 1.95"
12+
checkout("tea") # prints "That item is not on the menu."

Ch9/coffeeorder_namedtuple.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from collections import namedtuple
2+
3+
CoffeeOrder = namedtuple("CoffeeOrder", ('item', 'addons', 'to_go'))
4+
5+
order = CoffeeOrder('pumpkin spice latte', ('whipped cream',), True)
6+
print(order.item) # prints 'pumpkin spice latte'
7+
print(order[2]) # prints 'True'

Ch9/customers_deque.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from collections import deque
2+
customers = deque(['Daniel', 'Denis'])
3+
4+
customers.append('Simon')
5+
print(customers) # prints deque(['Daniel', 'Denis', 'Simon'])
6+
7+
customer = customers.popleft()
8+
print(customer) # prints 'Daniel'
9+
print(customers) # prints deque(['Denis', 'Simon'])
10+
11+
customers.appendleft('James')
12+
print(customers) # prints deque(['James', 'Denis', 'Simon'])
13+
14+
last_in_line = customers.pop()
15+
print(last_in_line) # prints 'Simon'
16+
17+
print(customers) # prints deque(['James', 'Denis'])

Ch9/double_orders.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
orders = ["pumpkin spice latte", "caramel macchiato", "mocha cappuccino"]
2+
3+
new_orders = orders[:]
4+
for order in orders:
5+
# ... do whatever ...
6+
new_orders.append(order)
7+
orders = new_orders
8+
9+
print(orders)

Ch9/enumerate_orders.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
for number, (customer, drink) in enumerate(customers, start=1):
2+
print(f"#{number}. {customer}: {drink}")

Ch9/get_number.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
number = None
2+
while number is None:
3+
try:
4+
raw = input("Enter a number ('q' to quit): ")
5+
if raw == 'q':
6+
break
7+
number = int(raw)
8+
except ValueError:
9+
print("You must enter a number.")
10+
else:
11+
print(f"You entered {number}")

0 commit comments

Comments
 (0)