Informatics2-2018/Lab07
A MathWikiből
A lap korábbi változatát látod, amilyen Gaebor (vitalap | szerkesztései) 2018. március 28., 17:16-kor történt szerkesztése után volt.
Tartalomjegyzék |
Exercises
Work in Spyder!
Shapes on a canvas
Shapes
Write a class called Shape.
- Let it have two members: x and y, the coordinates of the shape on the plane (center of mass).
- Define a move method, with one parameter v: a list of length 2, a vector to translate the shape with. After this method the coordinates should be changed.
Define the following classes as children of Shape:
- Ellipse with additional parameters (except the (x, y) coordinates): a and b the x and y axes radii
- Rectangle with additional parameters (except the (x, y) coordinates) a and b the length of the sides
Write an area method for both, which calculates the area!
Define an equation method for printing the equation of the Ellipse! Something like:
((x-1)/2)^2 + ((y-2)/3)^2 = 1
Inheritance and constructors
If the child class (e.g. Ellipse) you want to call the parents class' constructor then you have two ways:
class B(A): def __init__(self, x, y, a, b): A.__init__(self, x, y) # OR super(B, self).__init__(x, y)
The first explicitly calls the parents __init__
A.__init__(self, x, y)
The second one calls the parent of B which happens to be A:
super(B, self).__init__(x, y)
Vászon
Definiáljuk a Canvas (vászon) osztályt.
- Egyetlen tagváltozója legyen a shapes, ami alakzatok listáját tárolja.
- Definiáljuk egy add metódust, amivel újabb Shape-et adunk a vászonhoz!
- Oldjuk meg, hogy az osztályunk iterálható legyen! Ehhez definiáljuk az __iter__(self) metódust, valamit a next(self) metódust, ahogy az előadáson láttuk.
- Definiáljuk a crop metódust a következőképp: a bemeneti paraméter két pont koordinátája, ezek egy téglalap bal felső és jobb alsó pontjai. A függvény térjen vissza azon alakzatok listájával, amelyek a vásznon vannak és teljesen beleférnek az így definiált téglalapba. Ehhez a feladathoz az Ellipse és a Rectangle osztálynak is szüksége lesz egy box() metódusra, ami a legkisebb tartalmazó doboz bal felső és jobb alsó sarkait adja vissza.
Overload
- Írjunk egy függvényt, aminek az első argumentuma n, egy int típusú változó. A függvény térjen vissza True-val, ha annyi extra paraméterrel hívták meg, mint az első bemeneti paraméter értéke, egyébként térjen vissza False-szal.
- Definiáljunk egy szumma függvényt, ami tetszőlegesen sok bemeneti paraméterének összegével tér vissza!
- Kezeljük le a kivételt, ha a paraméterek típusa nem azonos!
- Definiáljunk egy print_words függvényt, úgy, hogy a megadott (akármennyi) szavakat annyiszor írja ki, amennyit megadunk bemenetnként (szavanként)!
- Kezejük le kivételként, ha a bemeneten nem egész számot adtak meg a szó gyakoriságára!
Iterálható
Íjunk olyan iterálható osztályt, mint a range, de ne egy listát járjon be, hanem csak az aktuális elemet tárolja.
class Range(object): def __init__( ... ): ... def __iter__( ... ): ... def next( ... ): ...
- konstruktora egy számot vagy sztringet kapjon. Addig a számig lehessen iterálni rajta, nullától, egyesével.
- Ha a szám nem pozitív, akkor 0 hosszan lehessen iterálni rajta.
- Ha sztringet kap a konstruktor és az nem értelmezhető egészként, akkor emeljünk ValueError kivételt.
- Ha értelmezhető egészként, akkor alakítsuk át egésszé és számoljunk azzal.
- Ha "inf" sztringet kap a konstruktor, akkor végtelen sokáig lehessen rajta iterálni!