Compare commits

..

2 Commits

Author SHA1 Message Date
b3c3a89118 Merge pull request 'CW Uebungen zu Klassen + Unterricht Code vom Freitag' (#3) from uebung_27022026 into master
Reviewed-on: #3

Cool, so viele Übungen. In der Praxis würde man vermütlich jede Übung einzeln in ein eigenes File legen und einzeln commiten, dann wäre eine Referenzierung einfacher und man müsste bei einem PR nicht alle/keine Übung akzeptieren, sondern könnte einzeln (Chery Picking).

https://www.codewars.com/kata/528d36d7cc451cd7e4000339 -> gute Idee die Instanzen der Studierenden als Klassenattribut zu verwenden!
2026-03-05 19:19:27 +01:00
Irina Rueegg
9af621b9ba CW Uebungen zu Klassen + Unterricht Code vom Freitag 2026-03-01 18:36:44 +01:00
2 changed files with 208 additions and 0 deletions

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