Előző - #14 Átlag | Tartalomjegyzék | Következő - #16 mód
medián([3, 7, 10, 4, 1, 6, 9, 2, 8]) → 6
Ha a számok listáját rendezett sorrendbe állítja, a medián szám a félúton lévő szám. A kiugró értékek miatt a statisztikai átlag sokkal nagyobb vagy kisebb lehet, mint a számok többsége, így a mediánszám jobb képet ad a listában szereplő számok jellemzőiről. Ez, az előző és a következő gyakorlat arra készteti, hogy a Python megoldja ezeket a statisztikai számításokat.
Gyakorlat leírása
Írj egy median()függvényt, amelynek számparamétere van . Ez a függvény a lista statisztikai mediánját adja vissza numbers. A páratlan hosszúságú lista mediánja a legközepes számban lévő szám, ha a lista rendezett sorrendben van. Ha a lista páros hosszúságú, akkor a medián a két középső szám átlaga, ha a lista rendezett sorrendben van. Nyugodtan használja a Python beépített módszerét a számlistasort() rendezéséhez .
Ha egy üres listát ad át a következőnek, akkor mode() az vissza fog térni None.
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 :
assert median([]) == Nincs
állítás medián([1, 2, 3]) == 2
állítás medián([3, 7, 10, 4, 1, 9, 6, 5, 2, 8]) == 5,5
állítás medián([3, 7, 10, 4, 1, 9, 6, 2, 8]) == 6
véletlenszerű importálás
random.seed(42)
testData = [3, 7, 10, 4, 1, 9, 6, 2, 8]
i tartományban (1000):
random.shuffle(testData)
assert medián(tesztadatok) == 6
A számok sorrendjének megkeverése nem befolyásolhatja a mediánt. A forciklus 1000 ilyen véletlenszerű keverést végez, hogy alaposan ellenőrizze, hogy ez a tény igaz marad-e. A random.seed() függvény magyarázatát lásd a 19. gyakorlat „Jelszógenerátor” További olvasmányok részében.
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: len(), for ciklusok, kiterjesztett hozzárendelési operátorok, egész osztás, modulo operátor, indexek
Megoldás tervezése
Először ellenőrizze, hogy a numberslista üres-e, és ha igen, térjen vissza None. Ezután rendeznie kell őket a lista metódus hívásával sort(). Ezután számítsa ki a középső indexet egész számmal, elosztva a lista hosszát 2- vel . Az egész számok osztása normál osztást végez, majd az eredményt a következő legalacsonyabb egész számra kerekíti. A Python egész osztási operátora a // . Így például míg az 5/2 kifejezés kiértékelése a -ra 2.5, addig a kifejezés 5 // 2a -ra 2.
Ezután derítse ki, hogy a lista hossza páros vagy páratlan. Ha páratlan, a medián szám a középső indexen van. Gondoljunk néhány példára, hogy megbizonyosodjunk arról, hogy ez helyes:
Ezek helyesnek tűnnek. Ha a lista hossza páros, akkor a két középső szám átlagát kell kiszámítanunk. Ezek indexei a középső index és a középső index mínusz 1. Gondoljunk néhány példára, hogy megbizonyosodjunk a helyességről:
Ezek is korrektnek tűnnek. A páros hosszúságú listáknak van egy további lépése, hogy a medián két szám átlaga, ezért adja össze őket, és ossza el kettővel.
Különleges esetek és Gotchák
Ha a numbersparaméter egy üres lista, akkor a függvénynek vissza kell térnie None. Ezért az ezt ellenőrző kódot a függvény elejére kell tenni.
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/median-template.py and paste it into your code editor. Replace the underscores with code to make a working program:
def median(numbers):
# Special case: If the numbers list is empty, return None:
if len(numbers) == ____:
return ____
# Sort the numbers list:
____.sort()
# Get the index of the middle number:
middleIndex = len(____) // ____
# If the numbers list has an even length, return the average of the
# middle two numbers:
if len(numbers) % ____ == 0:
return (numbers[____] + numbers[middleIndex - ____]) / ____
# If the numbers list has an odd length, return the middlemost number:
else:
return numbers[____]
The complete solution for this exercise is given in Appendix A and https://invpy.com/median.py. You can view each step of this program as it runs under a debugger at https://invpy.com/median-debug/.
Prev - #14 Average | Table of Contents | Next - #16 Mode