J'ai la méthode calcularBeta1 . Lorsque j'exécute le programme, j'ai cette erreur:
ZeroDivisionError: division des flottants par zéro
class LecturaArchivo:
datosArchivo = ListaEnlazada()
operaciones = Operaciones()
xTemporal = 0
yTemporal = 0
nombreArchivo = input('Nombre del archivo: ')
archivo = open(nombreArchivo, "r")
lineas = archivo.read()
datos = lineas.split(',')
datoProxy = float(input('Proxy: '))
while lineas:
lineas = archivo.readlines()
xTemporal = datos[0]
yTemporal = datos[1]
datosArchivo.agregarNodoFinal(float(xTemporal), float(yTemporal))
print(datos)
sumaElementos = sum(datosArchivo.obtenerNodos())
mediaElementos = operaciones.media(sumaElementos, datosArchivo.tamano())
beta1 = operaciones.calcularBeta1(datosArchivo)
print('Beta1: ', beta1)
beta0 = operaciones.calcularBeta0(beta1, media)
print('Beta0: ', beta0)
yk = operaciones.calcularYK(beta0, beta1, datoProxy)
print('Regresión LÃneal: ', yk)
def calcularBeta1(self, lista):
actual = lista.nodoInicio
sumaXY = 0
sumaX = 0
sumaY = 0
sumaXCuadrada = 0
totalElementos = 0
while actual != None:
dato1 = actual.dato1
dato2 = actual.dato2
sumaXY += dato1 * dato2
sumaX += dato1
sumaY += dato2
sumaXCuadrada += math.pow(dato1, 2)
totalElementos += 1
actual = actual.siguienteNodo
resultadoB1 = (sumaXY - ((sumaX * sumaY ) / totalElementos )) / (sumaXCuadrada - math.pow(sumaX, 2) / totalElementos)
return resultadoB1
resultadoB1 = (sumaXY - ((sumaX * sumaY ) / totalElementos )) / (sumaXCuadrada - math.pow(sumaX, 2) / totalElementos)
3 Réponses :
Python est incapable de diviser les nombres par 0. Si jamais vous essayez de diviser par 0, python lancera une ZeroDivisionError , ce qui vous est arrivé. La meilleure façon de résoudre ce problème est simplement de ne pas diviser par zéro . Vous pouvez utiliser une instruction if pour vous assurer que les valeurs ne sont pas nulles.
Je ne dirais pas que "Python est incapable" de diviser par 0. Python implémente correctement la division en disant qu'il est impossible de diviser par zéro.
@zvone true, mais python ne peut pas diviser par zéro car il est impossible de diviser par zéro.
c'est exactement ce que je veux dire;) je voulais juste préciser qu'il est correct de ne pas pouvoir le faire
La ZeroDivisionError se produit lorsque vous essayez de diviser un nombre par 0, ce qui, comme vous le savez, est une impossibilité mathématique, changez simplement la valeur du dividende.
Ne divisez pas par zéro.
Dans l'expression dont il se plaint
resultadoB1 = (sumaXY - ((sumaX * sumaY ) / totalElementos )) / (sumaXCuadrada - math.pow(sumaX, 2) / totalElementos)
ce sera soit totalElementos , soit les résultats de sumaXCuadrada - math.pow (sumaX, 2) qui valent zéro.
Vous devrez ajouter du code pour gérer la possibilité de ces situations avant d'essayer de calculer cette formule.
Vous voulez dire les résultats de: (sumaXCuadrada - math.pow (sumaX, 2) / totalElementos)
@J_Zoio Le résultat de cette division ne sera nul que si le numérateur est zéro.
@J_Zoio Non, j'ai écrit ce que je voulais dire. Si sumaXCuadrada - math.pow (sumaX, 2) est égal à zéro, alors sumaXCuadrada - math.pow (sumaX, 2) / totalElementos sera également nul (en supposant que totalElementos est non nul, mais j'ai déjà dit que le fait d'être nul serait également un problème).
correction: ne divisez pas par zéro. Votre problème est dérivé des données - vous ne fournissez pas de données. Comment devrions-nous aider? Montrez-nous quelles entrées mènent à ce problème.
Après réflexion .. même si vous avez fourni des données .. si vos calculs sont corrects, vous ne pouvez pas faire grand-chose pour les empêcher - essayez: sauf: et invalidez qui calcule si cela conduit à une erreur-
Le problème est probablement que
datosArchivo.nodoInicioest None. Vous ne pouvez pas calculer la version bêta d'un ensemble vide.