Textová grafika – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Textová grafika – Python – Fórum – Programujte.comTextová grafika – Python – Fórum – Programujte.com

 

Vesy
~ Anonymní uživatel
3 příspěvky
9. 10. 2016   #1
-
0
-

Zdravím,

ráda bych požádala o pomoc s úkolem. V Pythonu jsem naprostý nováček a tak se mi podařila vymyslet tahle šílenost, které pořádně sama nerozumím. Měli jsme za úkol vykreslit čtverec otočený o 45° se stranou velikosti n, vypadá takhle: 

Připojen obrázek.

Ovšem můj kód je docela prasárna, řekla bych.

def square(n):
    x=2*n-1
    for i in range(x):
        for j in range(x):
                if ((i <= x//2) and (j >= x//2 - i) and (j <= x//2 + i)) or ((i > x//2) and (j >= i - x//2) and (j <= x -1 - i + x//2)):
                        print("#",end=" ")
                else:
                        print(".",end=" ")
        print()

Poradil by mi někdo, jak kód zjednodušit? 

Nahlásit jako SPAM
IP: 194.228.20.–
Kit+15
Guru
9. 10. 2016   #2
-
0
-

#1 Vesy
Zkus místo jednoho vnitřního cyklu s podmínky použít sekvenci tří cyklů za sebou. Zmizí tak všechny podmínky.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Vesy
~ Anonymní uživatel
3 příspěvky
9. 10. 2016   #3
-
0
-

Obávám se, že tím se mi ale nijak nezjednoduší složitost kódu (nebo jsem špatně pochopila radu). Měla jsem na mysli něco takového:

Připojen obrázek.

Připojen obrázek.

Taky vykresluje poměrně složitý obrazec, ale je napsán daleko elegantněji. Lámu si hlavu už nevím jak dlouho a bohužel bez výsledku.

Nahlásit jako SPAM
IP: 194.228.20.–
Kit+15
Guru
9. 10. 2016   #4
-
0
-

#3 Vesy
Minimálně bych zrušil proměnnou x, protože pak ji zbytečně dělíš dvěma místo přímého použití parametru n.

S elegancí jsem si zrovna hlavu nelámal. Posuď sama: 

def square(n):
    y=0
    while y<n:
        for x in range(n-y-1):
            print(".",end=" ")
        for x in range(y*2+1):
            print("#",end=" ")
        for x in range(n-y-1):
            print(".",end=" ")
        print()
        y+=1
    y=n-2
    while y>=0:
        for x in range(n-y-1):
            print(".",end=" ")
        for x in range(y*2+1):
            print("#",end=" ")
        for x in range(n-y-1):
            print(".",end=" ")
        print()
        y-=1

square(8)
Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
gcx110
Návštěvník
11. 10. 2016   #5
-
0
-

#3 Vesy

Ahoj, stačí Ti trocha matematiky, pokud chápeš, co dělá první kód.
 

#!/usr/bin/env python3

def square(n):
    for y in range(-n, n+1):
        for x in range(-n, n+1):
            if abs(x) + abs(y) < n:
                print("# ", end="")
            else:
                print(". ", end="")
        print()

square(5)

#4 Kit
Divím se, že jsi nenavrhnul něco takového.

Nahlásit jako SPAM
IP: 78.128.194.–
Kit+15
Guru
11. 10. 2016   #6
-
0
-

#5 gcx11
Nevidím nějaký významný rozdíl - napsal jsem první řešení, které mě napadlo.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Vesy0
Duch
11. 10. 2016   #7
-
+1
-
Zajímavé

Děkuji za veškeré a především užitečné rady. :) 

Nahlásit jako SPAM
IP: 194.228.20.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

C# Textová Hra — založil Hulk

C++ textova hra — založil MrHakl

Textová hra — založil Jason

Textová hra (Konzolová aplikace) — založil JiriVavru

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý