added fifth week

This commit is contained in:
Daniel Knüttel 2018-11-21 16:30:46 +01:00
parent 22fe9fc96f
commit 9d3c30c2db
4 changed files with 211 additions and 0 deletions

59
ex_17.py Normal file
View File

@ -0,0 +1,59 @@
class Person(object):
def __init__(self, name, age, birthplace):
self.name = name
self.age = age
self.birthplace = birthplace
def about_myself(self):
print("I am {name}, {age} years old and was born in {birthplace}".format(**self.__dict__))
class Student(Person):
def __init__(self, name, age, birthplace, semester, studium):
Person.__init__(self, name, age, birthplace)
self.semester = semester
self.studium = studium
def about_myself(self):
Person.about_myself(self)
print("Also I am a student and I study {studium} in semester {semester}".format(**self.__dict__))
class Musician(Person):
def __init__(self, name, age, birthplace, instrument):
Person.__init__(self, name, age, birthplace)
self.instrument = instrument
def about_myself(self):
Person.about_myself(self)
print("Also I am a musician and I play {instrument}".format(**self.__dict__))
class FootballPlayer(Person):
def __init__(self, name, age, birthplace, football_team):
Person.__init__(self, name, age, birthplace)
self.football_team = football_team
def about_myself(self):
Person.about_myself(self)
print("Also I am a football player and I play in the {football_team}".format(**self.__dict__))
class StudenWhoHappensToPlayFootball(Student, FootballPlayer):
def __init__(self, name, age, birthplace, semester, studium, football_team):
Student.__init__(self, name, age, birthplace, semester, studium,)
FootballPlayer.__init__(self, name, age, birthplace, football_team)
def about_myself(self):
Student.about_myself(self)
print("Also I am a football player and I play in the {football_team}".format(**self.__dict__))
if( __name__ == "__main__"):
p = Person("Emil", 12, "Dresden")
s = Student("Thomas", 22, "Duggendorf", 3, "Bachelor of Dye")
m = Musician("Gandalf", 3612, "Mittelerde", "Picolo")
f = FootballPlayer("Özil", 30, "Anatolien", "FC BAYERN")
sf = StudenWhoHappensToPlayFootball("Peter", 54, "Pentling", 10, "Philosopy", "FC Hinterdupfingen")
l = [p, s, m, f, sf]
for i in l:
i.about_myself()

50
ex_18.py Normal file
View File

@ -0,0 +1,50 @@
from cmath import exp
class PolarComplex(object):
def __init__(self, r, phi):
self._r = r
self._phi = phi
def __repr__(self):
return "{}({}, {})".format(PolarComplex.__name__, self._r, self._phi)
def __abs__(self):
return abs(self._r)
def __mul__(self, other):
if(isinstance(other, (int, float))):
return PolarComplex(self._r * other, self._phi)
if(isinstance(other, PolarComplex)):
return PolarComplex(self._r * other._r, self._phi + other._phi)
raise TypeError("*: cannot multiply {} and {}".format(type(other), type(self)))
def __truediv__(self, other):
if(isinstance(other, (int, float))):
return PolarComplex(self._r / other, self._phi)
if(isinstance(other, PolarComplex)):
return PolarComplex(self._r / other._r, self._phi - other._phi)
raise TypeError("/: cannot divide {} and {}".format(type(other), type(self)))
def __str__(self):
return str(self._r * exp(1j * self._phi))
def __rmul__(self):
if(isinstance(other, (int, float))):
return PolarComplex(self._r * other, self._phi)
if(isinstance(other, PolarComplex)):
return PolarComplex(self._r * other._r, self._phi + other._phi)
raise TypeError("*: cannot multiply {} and {}".format(type(other), type(self)))
def __rtruediv__(self, other):
if(isinstance(other, (int, float))):
return PolarComplex(other / self._r, -self._phi)
if(isinstance(other, PolarComplex)):
return PolarComplex(other._r / self._r, other._phi - self._phi)
raise TypeError("/: cannot divide {} and {}".format(type(other), type(self)))
if( __name__ == "__main__"):
c = PolarComplex(3, 0.3)
print(repr(c))
print(str(c))
print(repr(c / 3))
print(repr(c * 3))
z = PolarComplex(2, 0.2)
print(repr(c * z))
print(repr(c / z))

44
ex_19.py Normal file
View File

@ -0,0 +1,44 @@
class ext_int(int):
def __new__(cls, *args, **kwargs):
return int.__new__(cls, *args, **kwargs)
def is_prime(self):
if(abs(self) in (1, 0)):
return False
for i in range(2, abs(self)//2 + 1):
if(not self % i):
return False
return True
def is_positive(self):
return self > 0
def is_even(self):
return not self % 2
def is_odd(self):
return not self.is_even()
def get_inverse(self):
return 1 / self
class shitty_list(list):
def __new__(cls, *args, **kwargs):
return list.__new__(cls, *args, **kwargs)
def divide(self):
return (self[:len(self)//2], self[len(self)//2:])
if( __name__ == "__main__"):
print(ext_int(3).is_prime())
print(ext_int(4).is_prime())
print(ext_int(2).is_positive())
print(ext_int(-2).is_positive())
print(ext_int(2).is_even())
print(ext_int(3).is_even())
print(ext_int(2).is_odd())
print(ext_int(3).is_odd())
print(ext_int(2).get_inverse())
print()
print(shitty_list("abcdefg").divide())

58
ex_20.py Normal file
View File

@ -0,0 +1,58 @@
class FibonacciIterator(object):
def __init__(self, max_n):
self._precalculated = {0: 1, 1: 1, 2: 2, 3: 3, 4: 5}
self._biggest = 4
self._max_n = max_n
self._i = 0
def get_biggest_pair(self):
return ((self._biggest - 1, self._precalculated[self._biggest - 1])
, (self._biggest, self._precalculated[self._biggest]))
def fibonacci_element(self, n):
if(not isinstance(n, int)):
raise TypeError("n must be integer")
if(0 <= n <= self._biggest):
return self._precalculated[n]
(n_start_minus_one, b), (n_start, a) = self.get_biggest_pair()
for i in range(n_start, n):
swp = a
a += b
b = swp
self._precalculated[n] = a
self._biggest = n
return a
def __contains__(self, n):
if(n > self._max_n):
raise IndexError("{} > max_n({})".format(n, self._max_n))
return n <= self._biggest
def __getitem__(self, n):
if(n > self._max_n):
raise IndexError("{} > max_n({})".format(n, self._max_n))
return self.fibonacci_element(n)
def __iter__(self):
self._i = -1
return self
def __next__(self):
if(self._i > self._max_n):
raise StopIteration()
self._i += 1
return self.fibonacci_element(self._i)
if( __name__ == "__main__"):
i = FibonacciIterator(20)
for j in i:
print(j)
print(15 in i)
print(i[14])