MENÜ

Honlap címe

Előző - #26 Kézfogás | Tartalomjegyzék | Következő - #28 Határrajz

27. GYAKORLAT: TÉGLALAP RAJZ

rajzolj Téglalap(16, 4)  →  ################
                          ################
                          ########### #####
                          ################

Ebben a gyakorlatban néhány ASCII art , primitív grafikát készíthet szöveges karakterekből. Ebben a könyvben lesz néhány ilyen gyakorlat. Ebben az elsőben a kód egy tömör téglalapot rajzol # hashtag karakterből.

Gyakorlat leírása

Írjon drawRectangle()függvényt két egész paraméterrel: widthés magasság . A függvény nem ad vissza értéket, hanem egy téglalapot nyomtat a megadott számú hashtaggal vízszintes és függőleges irányban.

Nincsenek Python- assertutasítások a program helyességének ellenőrzésére. Ehelyett saját maga is szemrevételezheti a kimenetet. Például a hívásnak drawRectangle(10, 4) a következő kimenetet kell produkálnia:

##########

##########

##########

##########

Ha a widthvagy a magasság paraméter 0vagy negatív szám, akkor a függvénynek nem szabad kiírnia semmit.

Próbáljon megoldást írni a leírásban szereplő információk alapján. Ha továbbra is problémái vannak ennek a gyakorlatnak a megoldásával, további tippekért olvassa el a Megoldástervezés és a Különleges esetek és Gotchák című részt.

Előfeltétel fogalmak: forciklusok, range() , print(), end kulcsszó argumentum forprint()

Megoldás tervezése

A megoldáshoz egy pár egymásba ágyazott for hurok szükséges. A belső forhurok egy sor hashtag karaktert nyomtat a paraméter szélességének megfelelően width, míg a külső forciklus a paraméterrel megegyező számú sort height. A belső hurkon belül akadályozza meg az újsor automatikus nyomtatását a kulcsszó argumentumának print()átadásával , például print('#', end='') .end=''

Alternatív megoldásként karakterlánc-replikációt is használhat hashtag karakterekből álló sor létrehozásához. A Pythonban használhatja az *operátort egy karakterlánccal és egy egész számmal, hogy kiértékeljen egy hosszabb karakterláncot. Például írja be a következőket az interaktív héjba:

>>> "Helló" * 3

'Helló helló helló'

>>> '#' * 16

"################"

>>> szélesség = 10

>>> szélesség * '#'

"##########"

A karakterlánc-replikáció használatával elkerülheti, hogy a megoldásban szükség legyen egy második for ciklusra.

Különleges esetek és Gotchák

Ennek a gyakorlatnak a megoldása meglehetősen egyszerű. De meg kell jegyezni, hogy a terminálablakokban a szöveges karakterek kétszer olyan magasak, mint a szélesek. Ha négyzet alakú alakzatot szeretne megjeleníteni, a függvénynek átadott szélesség drawRectangle()kétszerese legyen a magasságnak.

Most próbáljon meg egy megoldást írni az előző szakaszok információi alapján. Ha továbbra is problémái vannak a gyakorlat megoldásával, olvassa el a Megoldássablon részt további tippekért.

Megoldás sablon

Próbáljon először megoldást írni a semmiből. De ha nehézségei vannak, akkor a következő részprogramot használhatja kiindulási helynek. Másolja ki a következő kódot a https://invpy.com/rectangledrawing-template.py webhelyről , és illessze be a kódszerkesztőbe. Cserélje ki az aláhúzást kódra, hogy működő programot készítsen:

def drawTéglalap (szélesség, magasság):

    # Speciális eset: Ha a szélesség vagy magasság kisebb, mint 1, ne rajzoljon semmit:

    ha szélesség ____ 1 vagy magasság ____ 1:

        Visszatérés

 

    # Hurok az egyes sorokon:

    tartományban lévő sorhoz (____):

        # Hurok az egyes oszlopokon ebben a sorban:

        oszlophoz a tartományban (szélesség):

            # Hashtag nyomtatása:

            print('#', ____='')

        # A sor végére nyomtasson új sort:

        nyomtatás()

A gyakorlat teljes megoldását az A függelék és a https://invpy.com/rectangledrawing.py tartalmazza . A program minden lépését megtekintheti, amint az egy hibakereső alatt fut a https://invpy.com/rectangledrawing-debug/ oldalon .

További irodalom

Az ASCII művészet példáit a https://en.wikipedia.org/wiki/ASCII_art és a https://www.asciiart.eu/ oldalon találja . Számos ASCII művészeti példát is összeállítottam a .txt szövegfájlokban ebben a Git repóban: https://github.com/asweigart/asciiartjsondb

Előző - #26 Kézfogás | Tartalomjegyzék | Következő - #28 Határrajz

 

Asztali nézet