aboutsummaryrefslogtreecommitdiff
path: root/Python/Beginner training/Classes.py
diff options
context:
space:
mode:
Diffstat (limited to 'Python/Beginner training/Classes.py')
-rw-r--r--Python/Beginner training/Classes.py238
1 files changed, 238 insertions, 0 deletions
diff --git a/Python/Beginner training/Classes.py b/Python/Beginner training/Classes.py
new file mode 100644
index 0000000..ea537f8
--- /dev/null
+++ b/Python/Beginner training/Classes.py
@@ -0,0 +1,238 @@
+import sys
+import math
+import random
+import os
+
+def BankAccountTask():
+ class BankAccount:
+ def __init__(self, id, balance):
+ self.id = int(id)
+ self.__balance = float(balance)
+
+ def Deposit(self, amount):
+ self.__balance += amount
+
+ def Withdraw(self, amount):
+ self.__balance -= amount
+
+ def GetBalance(self):
+ return self.__balance
+
+ def __str__(self):
+ return "Account {0}, balance {1}".format(self.id, self.GetBalance())
+
+ accounts = {}
+ while True:
+ command = input().split(' ')
+
+ if command[0].lower() == "end":
+ break
+ elif command[0] == "Add":
+ accounts[int(command[1])] = BankAccount(int(command[1]), float(command[2]))
+ elif command[0] == "Deposit":
+ accounts[int(command[1])].Deposit(float(command[2]))
+ elif command[0] == "Withdraw":
+ accounts[int(command[1])].Withdraw(float(command[2]))
+ elif command[0] == "Info":
+ print(accounts[int(command[1])])
+ elif command[0] == "Print":
+ for acc in accounts: print(accounts[acc])
+ else:
+ print("Invalid command!")
+
+
+def PizzaTask():
+ class Dough():
+ def __init__(self, type, cooking_method, weight):
+ type = type.lower(); cooking_method = cooking_method.lower()
+ self.__validate(type, cooking_method, weight)
+
+ self.__type = str(type)
+ self.__cooking_method = str(cooking_method)
+ self.__weight = int(weight)
+
+ self.__total_cals = 2.0 * self.__weight
+ if type == "white": self.__total_cals *= 1.5
+ if cooking_method == "crispy":
+ self.__total_cals *= 0.9
+ elif cooking_method == "chewy":
+ self.__total_cals *= 1.1
+
+ def __validate(self, type, cooking_method, weight):
+ type = str(type); cooking_method = str(cooking_method); weight = int(weight)
+
+ if (type != "white" and type != "wholegrain") or \
+ (cooking_method != "crispy" and cooking_method != "chewy" and cooking_method != "homemade"):
+ raise ValueError()
+
+ if weight < 1 or weight > 200:
+ raise NameError()
+
+ def get_cals(self):
+ return self.__total_cals
+
+ class Topping():
+ def __init__(self, type, weight):
+ type = type.lower()
+ self.__validate(type, weight)
+
+ self.__type = str(type)
+ self.__weight = int(weight)
+
+ self.__total_cals = 2.0 * self.__weight
+ if type == "veggies":
+ self.__total_cals *= 0.8
+ elif type == "sauce":
+ self.__total_cals *= 0.9
+ elif type == "cheese":
+ self.__total_cals *= 1.1
+ else:
+ self.__total_cals *= 1.2 # Sauce
+
+ def __validate(self, type, weight):
+ type = str(type); weight = int(weight)
+
+ # usng different types of error to indicate what to write on screen
+ if type != "meat" and type != "veggies" and type != "cheese" and type != "sauce":
+ raise AssertionError()
+
+ if weight < 1 or weight > 50:
+ raise AttributeError()
+
+ def get_cals(self):
+ return self.__total_cals
+
+ class Pizza():
+ def __init__(self, name, num):
+ self.__validate(name, num)
+
+ self.name = str(name)
+ self.__dough = None # not public because task doesn't want it to be
+ self.__toppings = []
+ self.__total_cals = 0.0
+
+ def __validate(self, name, num):
+ name = str(name); num = int(num)
+
+ if len(name) < 1 or len(name) > 15:
+ raise MemoryError()
+
+ if num < 0 or num > 10:
+ raise IndexError()
+
+ def add_dough(self, dough):
+ self.__dough = dough
+ self.__total_cals += dough.get_cals()
+
+ def add_topping(self, topping):
+ self.__toppings.append(topping)
+ self.__total_cals += topping.get_cals()
+
+ def __str__(self):
+ return "{0} - {1} Calories.".format(self.name, self.__total_cals)
+
+ def n_toppings(self):
+ return len(self.__toppings)
+
+ def cals(self):
+ return self.__total_cals
+
+ info = input().split(' ')
+ try:
+ in_pizza = Pizza(info[1], info[2])
+
+ info = input().split(' ')
+ in_pizza.add_dough(Dough(info[1], info[2], info[3]))
+
+ while True:
+ info = input().split(' ')
+
+ if info[0].lower() == "end":
+ break
+ else:
+ in_pizza.add_topping(Topping(info[1], info[2]))
+
+ print(in_pizza)
+
+ except ValueError:
+ print('Invalid type of dough.')
+ except NameError:
+ print('Dough weight should be in the range [1..200].')
+ except AssertionError:
+ print('Cannot place {0} on top of your pizza.'.format(info[1]))
+ except AttributeError:
+ print('{0} weight should be in the range [1..50].'.format(info[1]))
+ except MemoryError:
+ print('Pizza name should be between 1 and 15 symbols.')
+ except IndexError:
+ print('Number of toppings should be in range [0..10].')
+
+ while True:
+ command = input().split(' ')
+
+ if command[0] == "END": break
+ # elif command[0] == "Dough":
+
+
+def CarVender():
+ class Engine():
+ def __init__(self, model, power, displacement = 'n/a', efficiency = 'n/a'):
+ self.__model = model
+ self.__power = power
+ self.displacement = displacement
+ self.efficiency = efficiency
+
+ def __str__(self):
+ return " {0}:\n Power: {1}\n Displacement: {2}\n Efficiency: {3}"\
+ .format(self.__model, self.__power, self.displacement, self.efficiency)
+
+ class Car():
+ def __init__(self, model, engine, weight = 'n/a', color = 'n/a'):
+ self.__model = model
+ self.__engine = engine
+ self.weight = weight
+ self.color = color
+
+ def __str__(self):
+ return "{0}:\n{1}\n Weight: {2}\n Color: {3}"\
+ .format(self.__model, self.__engine, self.weight, self.color)
+
+ engines = {}
+ engines_n = int(input())
+ for i in range(engines_n):
+ info = input().split(' ')
+ list(filter(lambda e: e != ' ', info))
+
+ engines[info[0]] = (Engine(info[0], info[1]))
+ if len(info) == 3:
+ try:
+ engines[info[0]].displacement = int(info[2])
+ except:
+ engines[info[0]].efficiency = info[2]
+ elif len(info) == 4:
+ engines[info[0]].displacement = int(info[2])
+ engines[info[0]].efficiency = info[3]
+
+ cars = []
+ cars_n = int(input())
+ for i in range(cars_n):
+ info = input().split(' ')
+ info = [e for e in info if e != '']
+
+ cars.append(Car(info[0], engines[info[1]]))
+ if len(info) == 3:
+ try:
+ cars[i].weight = int(info[2])
+ except:
+ cars[i].color = info[2]
+ elif len(info) == 4:
+ cars[i].weight = info[2]
+ cars[i].color = info[3]
+
+ for curr_car in cars:
+ print(curr_car)
+
+
+#BankAccountTask()
+#PizzaTask()
+CarVender()