Napíš programJednoduchá20 XPÚloha 3/8

Textový mlynček

Zadanie

Program načíta text a počet opakovaní n a nakreslí z nich textový mlynček: n kópií textu, ktoré vychádzajú z jedného bodu a sú rovnomerne otočené - i-ta kópia o uhol i * 360 / n stupňov (i = 0, 1, …, n − 1).

Text otočíš parametrom angle v create_text. Aby lopatky mlynčeka nezačínali presne v strede, môžeš pred text pridať pár medzier alebo použiť anchor="w".

Text a počet môžeš načítať z konzoly (input), alebo z dvoch textových polí (Entry) po stlačení tlačidla - vtedy je prvé pole text a druhé počet.

Program beží v simulácii tkinteru priamo v prehliadači - po spustení uvidíš okno a môžeš doň klikať. Testy klikajú a kontrolujú, čo sa na plátne nakreslilo.

Príklady

  • Volanie

    from tkinter import _mente as okno
    
    if len(okno.entries()) >= 2 and okno.buttons():
        okno.type("MENTE", entry=0)
        okno.type("8", entry=1)
        okno.press()
    texty = okno.items("text")
    okno.check("pocet textov", len(texty) == 8, f"na platne je {len(texty)} textov")
    okno.check("kazdy text je zadane slovo", texty and all(t.text.strip() == "MENTE" for t in texty))
    uhly = sorted(round(t.angle % 360, 1) for t in texty)
    okno.check("texty su otocene rovnomerne", uhly == [round(i * 360 / 8, 1) for i in range(8)], f"uhly: {uhly}")
    okno.check("vychadzaju z jedneho bodu", len({(round(t.coords[0]), round(t.coords[1])) for t in texty}) == 1)

    Očakávaný výstup

    pocet textov: OK
    kazdy text je zadane slovo: OK
    texty su otocene rovnomerne: OK
    vychadzaju z jedneho bodu: OK

Po odoslaní riešenie overia ešte 2 skryté testy: 7 lopatiek, jedna lopatka.

Python sa spustí pri prvom spustení kódu.

Ctrl+Enter spustí program. Tab odsadí riadok. Esc a potom Tab opustí editor.

Vstup (stdin)

Každý riadok = jedno volanie input().

Výstup

Nápovedy

Najprv to skús sám. Každá nápoveda prezradí o niečo viac - a trochu zníži odmenu.

Bez prihlásenia sú nápovedy zadarmo - ale ani XP sa neudeľujú.

Riešenie

Riešenie sa odomkne po poslednej nápovede.