Učíme sa Python – časť 6. (while cyklus 2)

0

Vytvorme si pomocnú metódu, ktorú využijeme pri ďalšej úlohe:

def isDivisor(n, d):
    return n % d == 0

Táto metóda nám vráti True, ak číslo n je deliteľné číslom d. Úloha, pri ktorej túto funkciu využijeme znie „Vypíš všetky delitele čísla n“. Riešenie tejto úlohy vyzerá nasledovne:

def printDivisors(n): 
    d = 1 
    while d <= n: 
        if isDivisor(n, d): 
            print(d) 
        d += 1

Funkcia začína na čísle 1 a prechádza všetky čísla od 1 po n. Pre každé číslo sa skontroluje, či nie je deliteľom nášho n. Na zistenie toho, či je číslo deliteľom, sa využíva naša pomocná funkcia.

NOTE: Áno, úloha sa dá vyriešiť aj pomocou for cyklu. Učíme sa však while cyklus a preto ukazujeme toto riešenie.

V minulej časti sme vytvorili malý program, ktorý si od používateľa dookola pýta číslo, až kým používateľ neuhádne dane „štastné číslo“. Program vyzeral takto:

tip = 0
stastne_cislo = 7

while(tip != stastne_cislo):
    tip = int(input("Tipni si: "))

print("Gratulujeem.")

Skús program upraviť tak, aby používateľa navádzal na správnu odpoveď. To znamená, ak používateľ tipol menšie číslo, tak to používateľovi povie, aby skúsil väčšie číslo. Ak tipne väčšie číslo, tak mu to odporučí skúsiť menšie číslo.

Výsledný kód môže vyzerať nejak takto:

tip = 0
stastne_cislo = 7

while(tip != stastne_cislo):
   tip = int(input("Tipni si: "))

   if tip > stastne_cislo:
       print("Cislo je mensie")        
   elif tip < stastne_cislo:
       print("Cislo je vacsie")

Na záver si ešte ukážme takú malú zaujímavosť. Spravme funkciu, ktorá bude do nekonečna vypisovať čísla. Niečo takéto:

def toInfinity():
    n = 0
    while True:
        print(n)
        n += 1

Skús si kód pustiť. Celkom rýchlo ti začnú čísla nabiehať. Skúsme to trochu spomaliť tým, že budeme vypisovať iba tie čísla, ktoré sú deliteľné číslom 9876543 (alebo iným, náhodným veľkým číslom). Napr. takto:

def toInfinity():
    n = 0
    while True:
        if n % 9876543 == 0:
            print(n)
        n += 1

Teraz sa nám vypisovanie pekne spomalilo a program nám vypisuje násobky čísla 9876543. Na pomalšom počítači to môže celkom dlho trvať a preto sa nám môže chvíľami zdať, že náš program prestal pracovať. Preto opäť trochu upravnem našu funkciu:

def toInfinity():
    n = 0
    while True:
        if n % 9876543 == 0:
            print(n)

        if n % 100000 == 0:
            print("Neboj sa, pracujem...")
        n += 1

Pridaný if spôsobí to, že nám program každých 100 000 čísel bude oznamovať, že stále pracuje. Super! Tiež je super si pozrieť ako náš program vyťažuje CPU pomocou Task Managera. Program slúži len na demonštratívne účely, reálne sa dá spraviť aj takto:

def infinity():
    n = 0
    while True:
        n += 9876543
        print(n)

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.