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!
This commit is contained in:
commit
b3c3a89118
41
src/uebung_klassen_Dog.py
Normal file
41
src/uebung_klassen_Dog.py
Normal 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
167
src/uebungen_klassen_cw.py
Normal 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
|
||||||
Loading…
x
Reference in New Issue
Block a user