Język Python - średnia arytmetyczna, Problem


(Mister Wojtek) #1

Witam,

Chciałem napisać program w Pythonie który liczy średnią arytmetyczną, jednak żeby obliczenia znajdowały się w funkcji, napisałem tak:

m=raw_input('podaj ciag liczb ')

m=m.split()

li=len(m)

w=0


def avg(*arg):

    n=0

    for w in arg:

        d=m[w]

        n=float(n)+float(d)

        if w==(li-1):

            k=float(n)/li

            print k


for i in range(li):

    avg(i)

nie wiem dlaczego ale ten fragment kodu:

n=float(n)+float(d)

źle dodaje do siebie elementy "tablicy", tzn.

jak wstawiłem np. taki ciąg liczb: 5 7 6 2

to n powinno równać się w pętli odpowiednio:

5

12

18

20

natomiast równa się:

5

7

6

2

Czyli wcale nie dodaje :frowning:

więc w wyniku programu zamiast (5+7+6+2) / 4 wychodzi 2 / 4

Ma ktoś jakiś pomysł? z góry dzięki


(nintyfan) #2

Python to nie C lub jemu podobne. W pythonie, linijka

for w in arg:

Nie przypisuje do w elementu indeksu(numeru) elementu w tablicy, lecz sam element. W takim razie masz dwie opcje 1:

for w in arg:

    n=n + float(w)

    e=e + 1

---tutaj dzielisz przez ilość elementów-------

2.

for w in rang(len(arg)):

    n=n + float(arg[w])

    e=e + 1

---tutaj dzielisz przez ilość elementów-------

Problem też stanowi gwiazdka przed nazwą parametru funkcji avg. Nie powinieneś również dwukrotnie iterować po tablicy. Pełny kod:

m=raw_input('podaj ciag liczb ')

m=m.split()

li=len(m) 

d=0


for a in m:

    d=d + float(a)


print (d/li)

I to na tyle.


(Mister Wojtek) #3

Dziękuję Ci bardzo za pomoc, zrobiłem to zadanko tak trochę po swojemu:

m=raw_input('podaj ciag liczb ')

m=m.split()

li=len(m)


def avg(*arg):

    d=0

    e=0

    for a in m:

        d=d + float(a)

        e=e+1

        if e==(li):

            print (d/li)


avg(li)

i tak też już działa :smiley: