Calculating the average and weighted average with For

Asked

Viewed 1,735 times

0

because I’m making the mistake File "", line 50 print ("This is the sum of the products between the samples and their respective weights", Pixi)" ^ to calculate the weighted average with the user input data set.

Because I am recycling n and i indexes, I may have problems creating other statistical calculations such as Median and Quadratic Mean?

Syntaxerror: EOL while Scanning string literal # Average

#Índice referente ao número da amostra.
n=int(input("Insira o número total de amostras"))
#Índice i que vai percorrer todas as amostras
i=0
#Lista vazia para conter as amostras
Amostras=[]
#For para percorrer todo o contador das médias
for i in range(i,n):        
    #Adiciona o valor da amostra dentro da lista de amostras
    Amostras.append(int(input("Insira o valor das amostras")))
#Escreve a lista de amostras na tela para o usuário
print(Amostras)

#Soma das amostras
Xi = 0
#Total 
N = len(Amostras)
for amostrai in Amostras:
    Xi +=amostrai
print ("Esse é o valor da soma das amostras", Xi)
print ("Este é a quantidade de amostras que você possui", N)

print ("Esta é a média", Xi/N)

# Média Ponderada

#Lista com os pesos de cada variável
pi = []
#Lista com os valores de cada variável
xi = []

#Lista com os produtos do peso e da variável associada ao índice i
amostraponderadai = []

for i in range (i,n):
    pi.append(int(input("Insira o peso associado a variável: ",i)))
    xi.append(int(input("Insira a variável associado ao índice:", i)))
    amostraponderadai.append(pi(i)*xi(i))

#Soma das amostras
PiXi = 0
Nponderadai = len(amostraponderadai)

#Total do produto da amostra pelo peso
for pixi in amostraponderadai:
    PiXi += pixi
print ("Este é o valor da soma dos produtos entre as amostras e seus respectivos pesos", PiXi)"
print ("Este é a quantidade de amostras para a análise da média ponderada", Nponderadai)           
print ("Esta é a média ponderada do conjunto de dados": PiXi/Nponderadai)

1 answer

2


Kioolz,

You got some mistakes, let’s see one by one.

Your first error is in the print line:

print ("Este é o valor da soma dos produtos entre as amostras e seus respectivos pesos", PiXi)"

You left a double quotes at the end, just remove:

print ("Este é o valor da soma dos produtos entre as amostras e seus respectivos pesos", PiXi)

Fixing this print, another print will generate error:

print ("Esta é a média ponderada do conjunto de dados": PiXi/Nponderadai)

You concatenated the return of a division with a string, taking out that the two points are outside the string, we can leave the division as the second parameter of the print and place the two points inside the string:

print ("Esta é a média ponderada do conjunto de dados:", PiXi/Nponderadai)

Cool, with this your code will run and we will get some errors while running, the first of them is in input:

pi.append(int(input("Insira o peso associado a variável: ",i)))
xi.append(int(input("Insira a variável associado ao índice:", i)))

You passed the variable i as the second parameter of the input function, but it only takes one parameter, we can only remove i:

pi.append(int(input("Insira o peso associado a variável: ")))
xi.append(int(input("Insira a variável associado ao índice:")))

After correcting the input, you will get the list access error:

amostraponderadai.append(pi(i)*xi(i))

You tried to access the lists pi and xi with parentheses, but for this we use brackets, we will replace:

amostraponderadai.append(pi[i]*xi[i])

Finally, after correcting access to the list, your range will now generate exception, as you used the variable i in the range:

for i in range (i,n):

We can remove i do range, because you’re just making it simple:

for i in range(n):

After all these fixes, your code will run correctly, it will be more or less as follows:

#Índice referente ao número da amostra.
n=int(input("Insira o número total de amostras: "))

#Lista vazia para conter as amostras
Amostras=[]
#For para percorrer todo o contador das médias
for i in range(n):        
    #Adiciona o valor da amostra dentro da lista de amostras
    Amostras.append(int(input("Insira o valor das amostras: ")))
#Escreve a lista de amostras na tela para o usuário
print(Amostras)

#Soma das amostras
Xi = 0
#Total 
N = len(Amostras)

for amostrai in Amostras:
    Xi +=amostrai

print ("Esse é o valor da soma das amostras: ", Xi)
print ("Este é a quantidade de amostras que você possui: ", N)
print ("Esta é a média: ", Xi/N)

# Média Ponderada

#Lista com os pesos de cada variável
pi = []
#Lista com os valores de cada variável
xi = []

#Lista com os produtos do peso e da variável associada ao índice i
amostraponderadai = []

for i in range(n):
    pi.append(int(input("Insira o peso associado a variável: ")))
    xi.append(int(input("Insira a variável associado ao índice: ")))
    amostraponderadai.append(pi[i]*xi[i])

#Soma das amostras
PiXi = 0
Nponderadai = len(amostraponderadai)

#Total do produto da amostra pelo peso
for pixi in amostraponderadai:
    PiXi += pixi

print ("Este é o valor da soma dos produtos entre as amostras e seus respectivos pesos: ", PiXi)
print ("Este é a quantidade de amostras para a análise da média ponderada: ", Nponderadai)           
print ("Esta é a média ponderada do conjunto de dados: ", PiXi/Nponderadai)

See online: https://repl.it/repls/DelectableSatisfiedSpreadsheets

  • Wow, thank you so much! I had not seen so many mistakes in my prints and thanks for the tips with For and List Syntax, it confuses me a little when I recycle the indexes (i and n) because I always think that something will end up changing them and this can generate some numerical error in the following process.

  • The idea for this code is to add some other statistical variables, such as quadratic average, median and fashion. Some dispersion parameters and then some graphics, It is a small statistical manual that I have from a physics lab and that has very interesting techniques , I’m trying to automate it with Python as an exercise. :)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.