Python Chapter14 Solutions.py
Python Chapter14 Solutions.py
class BankAccount:
def __init__(self, name, amount, interest_rate):
self.name = name
self.amount = amount
self.interest_rate = interest_rate
def apply_interest(self):
self.amount *= (1 + self.interest_rate / 100)
#2 Item
class Item:
def __init__(self, name, price):
self.name = name
self.price = price
def __str__(self):
return '{:s}, {:.2f}'.format(self.name, self.price)
#3 ShoppingCart
class ShoppingCart:
def __init__(self):
self.items = []
def total(self):
return sum(item.price for item in self.items)
def __str__(self):
return '\n'.join(str(item) for item in self.items)
cart = ShoppingCart()
cart.add(Item('shirt', 18.99))
cart.add(Item('shirt', 22.59))
cart.add(Item('car', 22400))
cart.add(Item('lettuce', 1.49))
print(cart)
cart.remove_items('shirt')
print(cart)
#4 RestaurantCheck
class RestaurantCheck:
def __init__(self, check_number, sales_tax_percent, subtotal, table_number,
server_name):
self.check_number = check_number
self.sales_tax_percent = sales_tax_percent
self.subtotal = subtotal
self.table_number = table_number
self.server_name = server_name
def calculate_total(self):
return self.subtotal * (1+self.sales_tax_percent/100)
def print_check(self):
output_file = open('check' + str(self.check_number) + '.txt', 'w')
print('Check Number:', self.check_number, file=output_file)
print('Sales tax: ', self.sales_tax_percent, '%', sep='', file=output_file)
print('Subtotal: {:.2f}'.format(self.subtotal), file=output_file)
print('Total: {:.2f}'.format(self.calculate_total()), file=output_file)
print('Table Number:', self.table_number, file=output_file)
print('Server:', self.server_name, file=output_file)
output_file.close()
#5 Ticket
class Ticket:
def __init__(self, cost, time):
self.cost = cost
self.time = time
def __str__(self):
return 'Ticket(' + str(self.cost) + ', ' + str(self.time) + ')'
def is_evening_time(self):
hour = int(self.time.split(':')[0])
return 18 <= hour <= 23
#6 MovieTicket
class MovieTicket(Ticket):
def __init__(self, cost, time, movie_name):
self.cost = cost
self.time = time
self.movie_name = movie_name
def __str__(self):
return 'Ticket(' + str(self.cost) + ', ' + str(self.time) + ', ' +
str(self.movie_name) + ')'
def afternoon_discount(self):
hour = int(self.time.split(':')[0])
if 12 <= hour <= 17:
return 10
else:
return 0
#7 Course
class Course:
def __init__(self, name, capacity):
self.name = name
self.capacity = capacity
self.student_IDs = []
def is_full(self):
return len(self.student_IDs) >= self.capacity
course = Course('CompSci', 3)
course.add_student('123')
course.add_student('123')
course.add_student('456')
course.add_student('789')
course.add_student('9999')
print(course.is_full())
print(course.student_IDs)
#8 Avatar
from random import randint, sample
from time import sleep
class Avatar:
def __init__(self, name, hit_points, attack_power, defense_power):
self.name = name
self.hit_points = hit_points
self.attack_power = attack_power
self.defense_power = defense_power
def attack(self):
return randint(1, self.attack_power)
def is_alive(self):
return self.hit_points > 0
class Fighter(Avatar):
def special_power(self):
if randint(1, 5) == 1:
return 2*self.attack_power
else:
return 0
class Mage(Avatar):
def special_power(self):
self.hit_points += 10
if not defender.is_alive():
print(defender.name, 'has been defeated.')
else:
print(fighter.name, ' --- ', fighter.hit_points)
print(mage.name, ' --- ', mage.hit_points)
print()
if attacker == fighter:
attacker = mage
defender = fighter
else:
attacker = fighter
defender = mage
#10 Timer
import time
class Timer:
def start(self):
self.initial_time = time.time()
def elapsed_seconds(self):
return time.time() - self.initial_time
timer = Timer()
timer.start()
input('Enter something: ')
print(timer.elapsed_seconds())
timer2 = Timer()
timer2.start()
input('Enter something else: ')
print(timer2.elapsed_seconds())
print(timer.formatted_time(timer.elapsed_seconds()))
#11 Calendar
class Calendar:
def __init__(self, year):
self.year = year
def is_leap_year(self):
return self.year % 400 == 0 or (self.year % 4 == 0 and self.year % 100 != 0)
c = 0
for i in range(self.first_day(m)):
c += 1
print(' ', end='')
calendar = Calendar(2018)
print(calendar.is_leap_year())
print(calendar.first_day(2))
calendar.print_calendar(2)