MENÜ

Honlap címe

Előző - #28 Határrajz | Tartalomjegyzék | Következő - #30 3D-s dobozrajz

29. GYAKORLAT: PIRAMISRAJZ

rajzol Piramis(5)  →      #
                       ###
                       #####
                       #######
                       #########

Ez a gyakorlat folytatja a 27. gyakorlat, a „Téglalap rajzolás” és a 28. gyakorlat, a „Határrajz” generatív ASCII művészeti programjait. Ebben a gyakorlatban a kódja kinyomtat egy piramist hashtag karakterekből tetszőleges méretben.

Gyakorlat leírása

Írjon drawPyramid()függvényt magasság paraméterrel. A piramis tetején egy középre állított hashtag található, a következő sorokban pedig kettővel több hashtag található, mint az előző sorban. A sorok száma megegyezik az heightegész számmal. 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ás drawPyramid(8)a következőt adná ki:

       #

      ###

     #####

    #######

   #########

  ###########

 #############

###############

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: karakterláncok, karakterlánc-összefűzés, karakterlánc-replikáció, forhurkok,range()

 

 

Megoldás tervezése

Fontos észrevenni az általános mintát, ahogy a piramis magassága növekszik. Íme egy 1-es magasságú piramis:

#

Íme egy 2-es magasságú piramis:

 #

###

Íme egy 3-as magas piramis:

  #

 ###

#####

A piramis helyes középre állításához ki kell nyomtatnia a megfelelő számú szóközt a sor bal oldalára. Íme a piramis heightbeállított értékkel 5 és a pontokkal jelölt szóközök, amelyek láthatóvá teszik őket:

....#

...###

..#####

.#######

#########

A hashtag karakterek száma 1 a legfelső sorban kezdődik, majd -val növekszik 2. A ciklusban lévő kódhoz a rowNumber * 2 + 1for értékkel megegyező számú hashtag szükséges . A következő táblázat egy 5-ös piramis szóközeinek és hashtageinek számát mutatja:

Sorszám

Helyek száma

Hashtagek száma

0

4

1

1

3

3

2

2

5

3

1

7

4

0

9

Figyeljük meg, hogy minden piramis esetében a felső sor szóközeinek száma height - 1, és minden következő sor eggyel kevesebb szóközt tartalmaz, mint az előző sor. Az egyes sorok létrehozásának egyszerűbb módja egy for ciklus, amely legfeljebb 0és a sorszámot nem tartalmazza height, ahol a 0. sor van felül. Ekkor a szóközök száma egy sorszámnál a magasság – (rowNumber + 1) .

String replication can easily create the # hashtag and space character strings. In Python, you can use the * operator with a string and an integer to evaluate to a longer string. For example, enter the following into the interactive shell:

>>> 'Hello' * 3

'HelloHelloHello'

>>> '#' * 7

'#######'

>>> rowNumber = 5

>>> (rowNumber * 2 + 1) * '#'

'###########'

Special Cases and Gotchas

If our solution uses a for loop to loop over the range from 0 up to, but not including, height, we don’t need a separate check for a height of 0 or a negative height. This is because these values cause the for loop to not run its code, resulting in no output.

Now try to write a solution based on the information in the previous sections. If you still have trouble solving this exercise, read the Solution Template section for additional hints.

Solution Template

Try to first write a solution from scratch. But if you have difficulty, you can use the following partial program as a starting place. Copy the following code from https://invpy.com/pyramiddrawing-template.py and paste it into your code editor. Replace the underscores with code to make a working program:

def drawPyramid(height):

    # Loop over each row from 0 up to height:

    for rowNumber in range(____):

        # Create a string of spaces for the left side of the pyramid:

        leftSideSpaces = ' ' * (____ - (rowNumber + ____))

        # Create the string of hashtags for this row of the pyramid:

        pyramidRow = '#' * (____ * 2 + ____)

        # Print the left side spaces and the row of the pyramid:

        ____(leftSideSpaces + pyramidRow)

The complete solution for this exercise is given in Appendix A and https://invpy.com/pyramiddrawing.py. You can view each step of this program as it runs under a debugger at https://invpy.com/pyramiddrawing-debug/.

Prev - #28 Border Drawing | Table of Contents | Next - #30 3D Box Drawing

 

Asztali nézet