""" Codewars Kata: https://www.codewars.com/kata/54fe05c4762e2e3047000add """ class Ship: def __init__(self, draft, crew): self.draft = draft self.crew = crew def is_worth_it(self): crew_weight = self.crew * 1.5 return self.draft - crew_weight > 20 Titanic = Ship(15, 10) print(Titanic.is_worth_it()) """ Codewars Kata: https://www.codewars.com/kata/528d36d7cc451cd7e4000339 """ class Student: all_students = [] def __init__(self, name, fives, tens, twenties): self.name = name self.fives = fives self.tens = tens self.twenties = twenties Student.all_students.append(self) def total_amount(self): return self.fives * 5 + self.tens * 10 + self.twenties * 20 richest_student = None multiple = False for s in Student.all_students: if richest_student is None: richest_student = s elif s.total_amount() > richest_student.total_amount(): richest_student = s multiple = False elif s.total_amount() == richest_student.total_amount(): multiple = True if multiple: print("all") else: print(richest_student.name) """ Codewars Kata: https://www.codewars.com/kata/5a03af9606d5b65ff7000009 """ class User: def __init__(self, name: str, balance: int, checking_account: bool): self.name = name self.balance = balance self.checking_account = checking_account def withdraw(self, amount): if amount > self.balance: raise ValueError("overdraw") self.balance -= amount return f"{self.name} has {self.balance}." def add_cash(self, amount): self.balance += amount return f"{self.name} has {self.balance}." def check(self, issuer, amount): if amount > issuer.balance: raise ValueError("bad check") if not issuer.checking_account: raise ValueError("non checking-account") self.balance += amount issuer.balance -= amount return f"{self.name} has {self.balance} and {issuer.name} has {issuer.balance}." """ Codewars Kata: https://www.codewars.com/kata/5941c545f5c394fef900000c """ class Warrior: RANKS = [ ("Greatest", 100), ("Master", 90), ("Champion", 80), ("Conqueror", 70), ("Elite", 60), ("Sage", 50), ("Veteran", 40), ("Warrior", 30), ("Fighter", 20), ("Novice", 10), ("Pushover", 1), ] def __init__(self, level=1, rank="Pushover", experience=100, achievements=None): self.level = level self.rank = rank self.experience = experience self.achievements = achievements if achievements is not None else [] def battle(self, enemy): if not enemy or enemy > 100: return "Invalid level" level_diff = enemy - self.level rank_diff = (enemy // 10 + 1) - (self.level // 10 + 1) if level_diff >= 5 and rank_diff >= 1: return "You've been defeated" else: self.xp_won(level_diff) if level_diff > 0: return "An intense fight" elif level_diff > -2: return "A good fight" else: return "Easy fight" def xp_won(self, diff: int): xp_gained = 0 if diff == -1: xp_gained = 5 elif diff == 0: xp_gained = 10 elif diff > 0: xp_gained = diff**2 * 20 if xp_gained: self.add_xp(xp_gained) def add_xp(self, xp_gained: int): self.experience += xp_gained if self.experience > 10000: self.experience = 10000 if self.level != self.experience // 100: self.level = self.experience // 100 for rank_name, max_level in self.RANKS: if max_level <= self.level: self.rank = rank_name break def training(self, training_arr): description, xp_gained, min_level = training_arr if self.level < min_level: return "Not strong enough" elif self.level >= min_level: self.achievements.append(description) self.add_xp(xp_gained) return description