alguno me ayuda con un código roto en python?

Iniciado por Joe Fraddy, 22 Enero 2015, 06:55 AM

0 Miembros y 1 Visitante están viendo este tema.

Joe Fraddy

Mi código es el siguiente:

Código (python) [Seleccionar]
# Funcion 8x9
def obtener_promedio_clase(alumnos):
   puntajes=[]
   alumnos = ['candela', 'milagros', 'ramiro']
   for alumno in alumnos:
       puntajes.append(sacar_promedio(alumno))
   return promedio(puntajes)

# Leccion 9x9
   print obtener_promedio_clase(alumnos)
   print calificaciones_con_letras(obtener_promedio_clase(alumnos))


El error: ¡Uy! Probá otra vez. Cuando tratamos de usarlo, vimos que esto estaba roto o que faltaba.

Lo que quiero hacer es mostrá en pantalla (print) el resultado de llamar a obtener_promedio_clase con tu lista de alumnos list. Tus alumnos deben ser [candela, milagros, ramiro] y Después mostrá en pantalla con print el resultado de calificaciones_con_letras para ver el promedio de la clase.

engel lex

#1
2 cosas...

1- lo ultimo
Código (python) [Seleccionar]
# Leccion 9x9
    print obtener_promedio_clase(alumnos)
    print calificaciones_con_letras(obtener_promedio_clase(alumnos))


eso está identado... es decir, está dentro de la funcion obtener_promedio_clase

2- y toda la función
Código (python) [Seleccionar]
sacar_promedio(alumno)
donde está? cómo es?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

Cita de: engel lex en 22 Enero 2015, 06:59 AM
2 cosas...

1- lo ultimo
Código (python) [Seleccionar]
# Leccion 9x9
    print obtener_promedio_clase(alumnos)
    print calificaciones_con_letras(obtener_promedio_clase(alumnos))


eso está identado... es decir, está dentro de la funcion obtener_promedio_clase

2- y toda la función
Código (python) [Seleccionar]
sacar_promedio(alumno)
donde está? cómo es?

En la segunda cosa que me señalas la estoy sacando de otra función anterior:

# Funcion 6x9
def sacar_promedio(alumno):
    tareas=promedio(alumno['tareas'])
    pruebas=promedio(alumno['pruebas'])
    examenes=promedio(alumno['examenes'])
    return 0.1 * tareas + 0.3 * pruebas + 0.6 * examenes

engel lex

ya creo que vi el error...

Código (python,3,5) [Seleccionar]
def obtener_promedio_clase(alumnos):
    puntajes=[]
    alumnos = ['candela', 'milagros', 'ramiro']
    for alumno in alumnos:
        puntajes.append(sacar_promedio(alumno))
    return promedio(puntajes)


alumnos son 3 strings... es decir, 3 palabras... pasas cada nombre como argumento a sacar_promedio

Código (python,2,3,4) [Seleccionar]
def sacar_promedio(alumno):
    tareas=promedio(alumno['tareas'])
    pruebas=promedio(alumno['pruebas'])
    examenes=promedio(alumno['examenes'])
    return 0.1 * tareas + 0.3 * pruebas + 0.6 * examenes


sacar promedio recibe la palabra y trata de sacar de ella una asociación inexistente...

es decir recibe "candela" e intenta hacer
Código (python) [Seleccionar]
"candela"['tareas']
cosa que sabes que no funcionará

creo que la implementación debería ser
Código (python) [Seleccionar]
def sacar_promedio(alumno):
   promedios=promedio(alumno)
   tareas=promedios['tareas']

no se como es tu funcion promedio, pero si asocia el nombre del alumno, lo conseguirá y lo sacará
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

#4
No, en realidad sigue igual, ya le modifique varias cosas pero me sigue dando el mismo error:

Código completo:
Código (python) [Seleccionar]
candela = {
   "nombre": "Candela",
   "tareas": [90.0, 97.0, 75.0, 92.0],
   "pruebas": [88.0, 40.0, 94.0],
   "examenes": [75.0, 90.0]
}
milagros = {
   "nombre": "Milagros",
   "tareas": [100.0, 92.0, 98.0, 100.0],
   "pruebas": [82.0, 83.0, 91.0],
   "examenes": [89.0, 97.0]
}
ramiro = {
   "nombre": "Ramiro",
   "tareas": [0.0, 87.0, 75.0, 22.0],
   "pruebas": [0.0, 75.0, 78.0],
   "examenes": [100.0, 100.0]
}

# ¡Agregá tu función acá abajo!
def promedio (numeros):
   total = sum(numeros)
   total = float(total)
   resultado = total/len(numeros)
   return resultado

# Funcion 6x9
def sacar_promedio(alumno):
   tareas=promedio(alumno['tareas'])
   pruebas=promedio(alumno['pruebas'])
   examenes=promedio(alumno['examenes'])
   return 0.1 * tareas + 0.3 * pruebas + 0.6 * examenes

# Funcion 7x9
def calificaciones_con_letras(resultado):
   if resultado >=90:
       return "A"
   elif resultado >=80:
       return 'B'
   elif resultado >=70:
       return 'C'
   elif resultado >=60:
       return 'D'
   else:
       return 'F'
print calificaciones_con_letras(sacar_promedio(candela))

# Funcion 8x9
def obtener_promedio_clase(alumnos):
   puntajes=[]
   alumnos = ['candela', 'milagros', 'ramiro']
   for alumno in alumnos:
       puntajes.append(sacar_promedio(alumnos))
   return promedio(puntajes)

# Leccion 9x9
   print obtener_promedio_clase(alumnos)
   print calificaciones_con_letras(obtener_promedio_clase(alumnos))

engel lex

está mal por lo que te dije...

observa

Código (python,7) [Seleccionar]
candela = {
   "nombre": "Candela",
   "tareas": [90.0, 97.0, 75.0, 92.0],
   "pruebas": [88.0, 40.0, 94.0],
   "examenes": [75.0, 90.0]
}
alumnos = ['candela', 'milagros', 'ramiro']

print(alumnos[0]==candela)


pero ahora al ver el codigo completo, veo que los alumnos están declarados como variables independientes, solo en el array tienes que quitar las comillas de los nombres

es decir

Código (python,7) [Seleccionar]
candela = {
   "nombre": "Candela",
   "tareas": [90.0, 97.0, 75.0, 92.0],
   "pruebas": [88.0, 40.0, 94.0],
   "examenes": [75.0, 90.0]
}
alumnos = [candela, milagros, ramiro]

print(alumnos[0]==candela)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

Ya lo hice pero me sigue diciendo lo mismo.

podrías modificar mi código de modo que corra???

engel lex

te recomiendo un debugger de python, es muy bueno... los debugger pueden ayudarte a resolver el 80% de los problemas
http://www.pythontutor.com/visualize.html#mode=edit

a mi tu codigo hasta donde está funciona bien, ya que retorna B


hasta la linea 46 el código corre perfecto... el problema viene a partir de la linea 49

Código (python,5) [Seleccionar]
def obtener_promedio_clase(alumnos):
   puntajes=[]
   alumnos = ['candela', 'milagros', 'ramiro']
   for alumno in alumnos:
       puntajes.append(sacar_promedio(alumnos))#la variable del loop es alumno, no alumnos
   return promedio(puntajes)


pero el peor error como te dije está en las ultimas 2 lineas.... al estar identadas (tener espacio a la izquierda) están dentro de obtener_promedio_clase, con quitarle el espacio se corrigen...

ahora... el ultimo error... la ultima linea

Código (python) [Seleccionar]
print calificaciones_con_letras(obtener_promedio_clase(alumnos))

calificaciones_con_letras requiere como argumento un alumno... le estás pasando alumnos que en ese ámbito ni si quiera existe

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

ya corregi la identación, pero ahora el debug me manda lo siguiente:

Traceback (most recent call last):
  File "python", line 57, in <module>
NameError: name 'alumnos' is not defined

engel lex

te estás lanzando a preguntar antes de analizar... así que analizemos...

el error es

CitarTraceback (most recent call last):
 File "python", line 57, in <module>
NameError: name 'alumnos' is not defined

la linea 57 es
Código (python) [Seleccionar]
print obtener_promedio_clase(alumnos)

dice que alumnos no está declarado... entonces... si el compilador no se equivoca... donde te equivocas tu?

donde declaraste alumnos? el ámbito global (donde haces el print) tiene acceso a esa variable?

esos errores son comunes... aprende a verlos... si no puedes, posiblemente estás muy cansado... aléjate del pc unos 15 minutos, toma agua y vuelve a intentar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.