Előző - #12 Legkisebb és legnagyobb | Tartalomjegyzék | Következő - #14 Átlag
kalkulálSum([2, 4, 6, 8, 10]) → 30
számítsaTermék([2, 4, 6, 8, 10]) → 3840
A Python beépített sum()függvénye az argumentumához átadott számok listájának összegét adja vissza. Ebben a gyakorlatban ezt a viselkedést újra implementálja a függvényében, és egy függvényt calculateSum() is létrehoz .calculateProduct()
Gyakorlat leírása
Írjon két calculateSum() és nevű függvényt calculateProduct(). Mindkettőnek van egy paramétere numbers, amely egész számok vagy lebegőpontos értékek listája lesz. A calculateSum()függvény összeadja ezeket a számokat, és visszaadja az összeget, míg a calculateProduct() függvény ezeket a számokat megszorozza és a szorzatot adja vissza. Ha az átadott lista calculateSum()üres, a függvény 0-t ad vissza . Ha a címzett lista calculateProduct() üres, a függvény a következőt adja vissza 1. Mivel ez a függvény a Python sum()függvényét replikálja, a megoldásnak nem szabad meghívnia.
Ezek a Python- assertutasítások leállítják a programot, ha feltételük False. Másolja őket a megoldási program aljára. Az Ön megoldása akkor helyes, ha a következő assertállítások feltételei mind igazak :
állítsa számítaniSum([]) == 0
assert számítási összeg([2, 4, 6, 8, 10]) == 30
állítsa számítsaTermék([]) == 1
állítsa számítsaTermék([2, 4, 6, 8, 10]) == 3840
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: listák, indexek, for ciklusok, kiterjesztett hozzárendelési operátor
Megoldás tervezése
Az összeg kiszámításához calculateSum()hozzon létre egy változót, amelynek neve resulttárolja a futó összeg eredményét. Ez a változó a következővel kezdődik 0, és miközben a program a számok paraméterben minden számot áthalad, minden szám hozzáadódik ehhez a futó összeghez. Ugyanez történik a -ban is calculateProduct(), kivéve, hogy a resultváltozó 1- gyel kezdődik , és minden számmal megszorozódik.
Különleges esetek és Gotchák
Kísértést érezhet, hogy egy nevű változót használjon sum a futó összeg tárolására. A Pythonban azonban ez a név már használatos a beépített sum()függvényhez. Ennek a névnek a helyi változóhoz való újrahasználata azt jelenti, hogy elveszítjük az eredeti sum() függvény meghívásának lehetőségét a függvény többi kódjában, mert felülírtuk sumaz általunk beírt értéket, nem pedig a Python sum()függvényét. Szeretné elkerülni a Python beépített függvényeinek nevének újraírását, ha felülírja őket, mivel ez furcsa hibákat okozhat a kódban. Néhány gyakran felülírt Python név a következő all: , any, dátum , email, fájl , format, hash , id, input, list, min, max , object, open , random, set , str, sum, test, és type. Ne használja ezeket a neveket saját változóihoz.
Ezenkívül egy üres számlista összege 0 legyen . Egy üres számlista szorzata 1 legyen . Ha több szám szorzatát számolja ki, a futó szorzat eredményét kezdje 01 helyett . Ha a -val kezdi , minden szorzás eredménye , és a számításProduct() függvény minden alkalommal 0-t ad vissza . A matematikában a 0 és 1 számokat additív azonosságnak , illetve multiplikatív azonosságnak nevezik . Az additív azonosság (0) hozzáadása egy számhoz ugyanazt a számot eredményezi, míg a multiplikatív azonosság (1) egy számmal való szorzata ugyanazt a számot eredményezi. Például a 12 + 0 csak 12, és a 12 × 1 is csak 12.00
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/sumproduct-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 kalkuláltSum(számok):
# Kezdje az összesített eredményt 0-val:
eredmény = ____
# Végezze el az összes számot a számok paraméterben, és adja hozzá őket
# a futóösszeg eredményéhez:
számhoz ____:
eredmény += ____
# A végső összegű eredmény visszaadása:
Visszatérés ____
def számításTermék(számok):
# Kezdje a termék eredményét 1-gyel:
eredmény = ____
# Végezze el az összes számot a számok paraméterben, és szorozza meg
# őket a futó termékeredmény szerint:
számhoz ____:
eredmény ____ szám
# A végeredmény visszaküldése:
Visszatérés ____
The complete solution for this exercise is given in Appendix A and https://invpy.com/sumproduct.py. You can view each step of this program as it runs under a debugger at https://invpy.com/sumproduct-debug/.
Further Reading
Just like in Exercise #12 “Smallest & Biggest” we can generate a list of one million numbers, and then calculate the sum and product of these numbers. Multiplying one million numbers creates an astronomically large number, so we’ll limit our test to a mere ten thousand numbers. Write the following program and save it in a file named testsumproduct.py. Run it from the same folder as your sumproduct.py file so that it can import it as a module:
import random, smallest
numbers = []
for i in range(10000):
numbers.append(random.randint(1, 1000000000))
print('Numbers:', numbers)
print(' Sum is', sumproduct.calculateSum(numbers))
print('Product is', sumproduct.calculateProduct(numbers))
When run, this program displays the million numbers between 1 and 1,000,000,000 it generated, along with the smallest number in that list.
Prev - #12 Smallest & Biggest | Table of Contents | Next - #14 Average