CW Uebungen zu Klassen + Unterricht Code vom Freitag #3

Merged
schmidmarco merged 1 commits from uebung_27022026 into master 2026-03-05 19:19:27 +01:00
2 changed files with 208 additions and 0 deletions
Showing only changes of commit 9af621b9ba - Show all commits

41
src/uebung_klassen_Dog.py Normal file
View File

@ -0,0 +1,41 @@
class Hund:
anzahl_hunde = 0
def __init__(self, name: str, rasse: str, alter: int, gewicht: float):
self.name = name
self.rasse = rasse
self.alter = alter
self.gewicht = gewicht
Hund.anzahl_hunde += 1
def __repr__(self):
return (
f"Hund(name='{self.name}', rasse='{self.rasse}',"
f"alter={self.alter}, gewicht={self.gewicht}kg"
)
def __str__(self):
return f"{self.name} ist ein {self.alter}-jähriger {self.rasse}"
def bellen(self, anzahl=1):
print("Wuff!" * anzahl)
return
def geburtstag(self):
self.alter += 1
print(
f"Alles Gute zum Geburtstag, {self.name}! Du bist jetzt {self.alter} Jahre alt."
)
return
def ist_welpe(self):
return self.alter < 2
hund1 = Hund("Bello", "Labrador", 3, 28.5)
hund2 = Hund("BBarky", "Puddel", 4, 28.5)
print(repr(hund1))
print(hund1)
print(hund1.__dict__)
print(hund1.ist_welpe())

167
src/uebungen_klassen_cw.py Normal file
View File

@ -0,0 +1,167 @@
"""
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