# HW 05

    def __init__(self,product,price,remaining = 0,store_money = 0):
        self.product = product
        self.price = price
        self.remaining = remaining
        self.store_money = store_money

    def vend(self):
        if self.remaining <= 0:
            return('Machine is out of stock.')
        elif  self.price > self.store_money:
            return('You must add ${0} more funds.'.format(self.price - self.store_money))
        elif self.price < self.store_money:
            change = self.store_money-self.price
            self.store_money = 0
            self.remaining -=1
            return('Here is your {0} and ${1} change.'.format(self.product,change))
        else:
            self.remaining -=1
            return('Here is your {0}.'.format(self.product))

    def add_funds(self,price):
        if self.remaining <= 0:
            return('Machine is out of stock. Here is your ${0}.'.format(price))
        else:
            self.store_money = price+self.store_money
            return('Current balance: ${0}'.format(self.store_money))

    def restock(self,remaining):
        self.remaining +=remaining
        return('Current {0} stock: {1}'.format(self.product,self.remaining))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# Trees

# Q2: Preorder

    res = []
    def helper(t):
        res.append(t.label)
        for branch in t.branches:
            helper(branch)
    helper(t)
    return res
1
2
3
4
5
6
7

# Linked Lists

# Q3: Store Digits

    if n < 10:
        return Link(n)

    string_n = str(n)
    first = int(string_n[0])
    rest = store_digits(int(string_n[1:]))
    return Link(first,rest)
1
2
3
4
5
6
7

# Generators/Trees

# Q4: Generate Paths

    if t.label == value:
        yield [t.label]
    for b in t.branches:
        generate_branch = generate_paths(b,value)
        for next in generate_branch:
            yield [t.label] + next
1
2
3
4
5
6