Előző - #26 Kézfogás | Tartalomjegyzék | Következő - #28 Határrajz
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