MENÜ

Honlap címe

Előző - #12 Legkisebb és legnagyobb | Tartalomjegyzék | Következő - #14 Átlag

13. GYAKORLAT: ÖSSZEG ÉS SZORZAT

  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

 

Asztali nézet