Előző - #24 15 percenként | Tartalomjegyzék | Következő - #26 Kézfogás
A szorzótábla elsajátítása gyermekkori matematikai oktatásunk korai része. A szorzótábla két egyjegyű szám minden szorzatát mutatja. Ebben a gyakorlatban egy szorzótáblát nyomtatunk a képernyőre beágyazott forhurkok és néhány karakterlánc-manipuláció segítségével az oszlopok helyes igazítása érdekében.
Gyakorlat leírása
Írjon egy programot, amely egy szorzótáblát jelenít meg, amely így néz ki:
| 1 2 3 4 5 6 7 8 9 10
--+-------------------------------
1| 1 2 3 4 5 6 7 8 9 10
2| 2 4 6 8 10 12 14 16 18 20
3| 3 6 9 12 15 18 21 24 27 30
4| 4 8 12 16 20 24 28 32 36 40
5| 5 10 15 20 25 30 35 40 45 50
6| 6 12 18 24 30 36 42 48 54 60
7| 7 14 21 28 35 42 49 56 63 70
8| 8 16 24 32 40 48 56 64 72 80
9| 9 18 27 36 45 54 63 72 81 90
10|10 20 30 40 50 60 70 80 90 100
A felső és a bal oldalon lévő számcímkék a szorozandó számok, és ahol az oszlop és a sor metszi egymást, az ezeknek a számoknak a szorzata. Figyelje meg, hogy az egyjegyű számok szóközökkel vannak kitöltve, hogy ugyanabban az oszlopban legyenek igazítva. rjust() A kitöltés biztosításához használhatja a Python karakterlánc-metódusát. Ez a metódus egy karakterláncot ad vissza szóköz karakterekkel a bal oldalon, hogy jobbra igazítsa a szöveget, és a Megoldástervezés szakasz elmagyarázza ennek működését.
A táblázat felső oldalán lévő vonal mínuszjelből áll. A bal oldali vonal függőleges csőkarakterekből áll (a billentyűzet Enter billentyűje felett). A metszéspontjukat plusz tábla jelzi. A megoldás akkor helyes, ha a kimenet megegyezik a szorzótábla fenti szövegével. print()A táblázat tetején található számcímkék és sorok egyszerű felhívását is használhatja . A szorzótábla szövegét azonban ne kódolja beprint() a programjába: a programnak többnek kell lennie, mint egy csomó hívásnak.
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ételek: print(), for ciklusok, range()két argumentummal, endkulcsszó argumentum a print() , rjust(), str() számára
Megoldás tervezése
A program első részében nyomtassa ki a vízszintes számcímkéket és az elválasztó vonalat. Ezt a két sort közvetlenül programozhatja két print() hívással:
print(' | 1 2 3 4 5 6 7 8 9 10')
print('--+------------------------------')
Ne feledje, hogy megfelelő mennyiségű szóközt kell hagynia a számok között, hogy a szorzótábla oszlopai sorba kerüljenek. Minden számot úgy kezelhet, mintha két számjegy lenne. Az egyjegyű számok bal oldalukon szóközt kell nyomtatni, jobbra igazítva a karakterláncot. A Python rjust()karakterlánc-metódusa megteheti ezt helyetted. Írja be a következőket az interaktív shellbe:
>>> '42'.rjust(4) # Két szóközt ad hozzá.
'42'
>>> '042'.rjust(4) # Egy szóközt ad hozzá.
'042'
>>> '0042'.rjust(4) # Nulla szóközt ad hozzá.
'0042'
Figyeljük meg, hogy az rjust(4) hívásból visszaadott összes karakterlánc négy karakter hosszú. Ha az eredeti karakterlánc négynél rövidebb, a rjust() metódus szóközt helyez a visszaadott karakterlánc bal oldalára, amíg az négy karakter hosszú lesz.
A szorzótábla kinyomtatásához két egymásba ágyazott for ciklus ismételhet minden szorzatot. A legkülső for ciklus az egyes sorok számain, a legbelső forciklus pedig az aktuális sor egyes oszlopainak számain ismétlődik. Nem szeretné, hogy minden termék után újsor jelenjen meg, hanem csak minden terméksor után. A Python print() függvénye automatikusan újsort ad az átadott karakterlánc végéhez. Ennek letiltásához adjon meg egy üres karakterláncot a end kulcsszó argumentumához, például print('Some text', end='').
A kód egyszerűsített változata így nézne ki:
>>> a tartomány (1, 11) sorához:
... az (1, 11) tartomány oszlopához:
... print(str(sor * oszlop) + ' ', end='')
... print() # Újsor nyomtatása.
...
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Az Ön megoldásában ezeket a termékeket megfelelően igazítani kell, valamint a számcímkéket a felső és a bal oldalon.
Különleges esetek és Gotchák
A legegyszerűbb hiba az, ha rossz a kitöltés mennyisége, ami azt eredményezi, hogy az oszlopok már nincsenek igazítva. Például, ha nem tölti be az egyszámjegyű szorzatokat egy extra szóköz karakterrel, a szorzótábla úgy néz ki, mint az előző szakasz rosszul igazított táblázata.
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
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/multiplicationtable-template.py and paste it into your code editor. Replace the underscores with code to make a working program:
# Print the heading of each column:
print(' | 1 2 3 4 5 6 7 8 9 10')
print('--+------------------------------')
# Loop over all numbers from 1 to 10:
for column in range(____, ____):
# Print the number label on the right side:
print(str(____).rjust(____) + '|', end=____)
# Loop over all numbers from 1 to 10:
for row in range(____, ____):
# Print the product, padded to two digits, followed by a space:
print(str(____).rjust(____) + ' ', end=____)
# After the loop, print a newline to end the row:
____()
The complete solution for this exercise is given in Appendix A and https://invpy.com/multiplicationtable.py. You can view each step of this program as it runs under a debugger at https://invpy.com/multiplicationtable-debug/.
Further Reading
A similar multiplication table project is also used in the free book, The Big Book of Small Python Projects, as Project #49 at https://inventwithpython.com/bigbookpython. If you are interested in chemistry, that book also has a project that displays the periodic table of elements.
Prev - #24 Every 15 Minutes | Table of Contents | Next - #26 Handshakes