☠ 6. Feladat

láthatóság

Írjunk egy függvényt, ami megvicceli a felhasználót a következő módokon:

Ha meghívod a függvényt, csak fusson le visszatérési érték nélkül, és a felhasználó tudjon tovább dolgozni. Miután meghívtad, a következő furcsaságok érjék a felhasználót a továbbiakban:

  • a max függvény két érték maximuma helyett azok minimumumát adja meg,
  • a min függvény két érték minimuma helyett azok maximumát adja meg,
  • a print függveny minden alkalommal végezze el a dolgát, aztán írja ki, hogy "Self destruct in 10 seconds", majd számoljon vissza a "10 9 8 7 6 5 4 3 2 1" számok kiírásával masodpercenként.

Megoldás

Hozzuk definiáljuk a kért függvényt! A függvények átírását úgy oldjuk meg, hogy a módosítandó függvényt beleírjuk egy ideiglenes változóba, majd a globális változót az ideiglenes változók segítségével módosítjuk.

In [1]:
def trololo():
    tempmax = max                                # ideiglenes max-függvény
    tempmin = min                                # ideiglenes min-függvény
    global min
    global max
    min = tempmax                                # a globális változók felülírása
    max = tempmin
    tempprint = print
    from time import sleep                       # a sleep() függvényt meg kell hívnunk
    def ujprint(*args, **kwargs):
        tempprint(*args, **kwargs)               # Az új print-függvény argumentumai szerint kell a régi plottal ábrázolni
        tempprint("Self destruct in 10 seconds") # Majd visszaszámolni
        for i in range(10, 0, -1):
            tempprint(i)
            sleep(1)
    global print
    print = ujprint
<ipython-input-1-d54666af5bb6>:4: SyntaxWarning: name 'min' is used prior to global declaration
  global min
<ipython-input-1-d54666af5bb6>:5: SyntaxWarning: name 'max' is used prior to global declaration
  global max
<ipython-input-1-d54666af5bb6>:16: SyntaxWarning: name 'print' is used prior to global declaration
  global print

Eztuán meghívjuk, és kipróbáljuk:

In [2]:
trololo()
In [3]:
max(1, 2, 3)
Out[3]:
1
In [4]:
min(1, 2, 3)
Out[4]:
3
In [5]:
print('Gyanútlanul kiírok valamit.')
Gyanútlanul kiírok valamit.
Self destruct in 10 seconds
10
9
8
7
6
5
4
3
2
1