Foros del Web » Programando para Internet » Python »

Error al querer mostrar un dato

Estas en el tema de Error al querer mostrar un dato en el foro de Python en Foros del Web. Bueno estoy desarrollando una aplicacion muy basica con los pocos conocimientos que tengo este es el codigo: Código: from record import record def mostrar_menu (): ...
  #1 (permalink)  
Antiguo 03/03/2012, 19:46
 
Fecha de Ingreso: febrero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Error al querer mostrar un dato

Bueno estoy desarrollando una aplicacion muy basica con los pocos conocimientos que tengo este es el codigo:

Código:
from record import record

def mostrar_menu ():
    print opciones
    return

opciones = "a) Agregar Jugador\nb) Agregar Puntaje\nc) Ver Tabla"

class Jugador(record):
    numero = 0
    nombre = ""
    equipo = ""
    puntaje = ""

numero = 0
numero_jugador = numero + 1

equipo = " "                
opcion = "z"

nombre = " "

def mostrar_jugador(jugador):
    print "Nombre: ",jugador.nombre
    print "Equipo: ",jugador.equipo
    print "Puntaje: ",jugador.puntaje
    return
                      
while opcion != " ":
    mostrar_menu()
    opcion = raw_input("Opcion: ")
    if opcion == "a":
        print "Jugador nº",numero
        numero_jugador =  Jugador( nombre = raw_input("Nombre: "),equipo = raw_input("Equipo: "),puntaje = 0)
        
    elif opcion == "c":
        mostrar_jugador(raw_input("Numero de Jugador: ")) // aqui quiero mostrar el jugador
Mi problema es que yo cargo el jugador bien
pero luego cuando lo quiero mostrar poniendo el numero identificatorio del jugado me sale:

Cita:
Traceback (most recent call last):
File "C:/Python27/Aplicacion Torneo/aplicacion", line 40, in <module>
mostrar_jugador(raw_input("Numero de Jugador: "))
File "C:/Python27/Aplicacion Torneo/aplicacion", line 27, in mostrar_jugador
print "Nombre: ",player.nombre
AttributeError: 'str' object has no attribute 'nombre'

Ni idea porque, alguien me puede ayudar
  #2 (permalink)  
Antiguo 03/03/2012, 20:11
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Error al querer mostrar un dato

Para ponertelo simple error dice que: el objeto str no tiene el atributo nombre. Y te dice que es la linea donde tienes. print "Nombre: ",player.nombre. En pocas palabras no le estas pasando el objeto correcto a la función.

Ademas Jugador no tiene ese constructor, no creo que corra.

Entre otras cosas, tienes miembros estáticos en la clase (lo cual si estas manejando varios objetos vas a tener problemas), estas heredando de la clase record (que desde mi punto de vista no tiene mucho sentido, especialmente por que no se que hace record), en lugar de implementar un método como mostrarjugador que te imprima el objeto Jugador, hubiera implementado el método __str__ en clase jugador.
  #3 (permalink)  
Antiguo 03/03/2012, 20:19
 
Fecha de Ingreso: febrero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Error al querer mostrar un dato

Como seria lo del metodo __str__ ? disculpa es que estoy intentando hacer esto con los conocmientos que tengo por eso lo adapto a lo que se

O tienes alguna idea de estructura de como hacer lo que quiero sería crear una apliucacion para cargar jugadores con un equipo y puntos

saludos-


CIERRO ESTE TEMA PORQEU CREE OTRO MAS EXPLICACION PARA QUE ME PUEDAN AYUDAR

Última edición por FrancoPoka; 03/03/2012 a las 21:30
  #4 (permalink)  
Antiguo 03/03/2012, 21:29
 
Fecha de Ingreso: febrero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Duda simple y rápida

Bueno miren las imagenes, ahora plantee mi problema mas facíl con respecto al otro post.

Espero que me puedan ayudar, el metodo de record y eso lo utilizo porque estoy sigiendo un tutorial

Saludos y les dejo las img


  #5 (permalink)  
Antiguo 03/03/2012, 22:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Duda simple y rápida

Te recomiendo leer python para todos. Por lo menos los primeros 5 capítulos. Porque veo que tienes varios conceptos mezclados.

Otro consejo es que leas código, de otras personas para que veas como programan personas con mayor experiencia.

Incluso te dare un pequeño ejemplo.
Código Python:
Ver original
  1. class Jugador:
  2.     def __init__(self, nombre, equipo):
  3.         self.nombre = nombre
  4.         self.equipo = equipo
  5.  
  6.     def __str__(self):
  7.         return "Nombre: %s\nEquipo: %s" % (self.nombre, self.equipo)
  8.  
  9. class Record:
  10.     def __init__(self):
  11.         self.record = []
  12.  
  13.     def agregar_jugador(self, jugador):
  14.         self.record.append(jugador)
  15.  
  16.     def __str__(self):
  17.         if self.record:
  18.             s = '\n\n'.join(str(i) for i in self.record)
  19.         else:
  20.             return "\nRecord vacio\n"
  21.         return "\nRecord:\n%s\n" % s
  22.  
  23.  
  24. record = Record()
  25.  
  26. print record
  27.  
  28. nombre = raw_input("Nombre: ")
  29. equipo = raw_input("Equipo: ")
  30. jugador_1 = Jugador(nombre, equipo)
  31. record.agregar_jugador(jugador_1)
  32. print record
  33.  
  34. nombre = raw_input("Nombre: ")
  35. equipo = raw_input("Equipo: ")
  36. jugador_2 = Jugador(nombre, equipo)
  37. record.agregar_jugador(jugador_2)
  38. print record
  #6 (permalink)  
Antiguo 03/03/2012, 22:19
 
Fecha de Ingreso: febrero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Duda simple y rápida

Cita:
Iniciado por razpeitia Ver Mensaje
Te recomiendo leer [URL="http://mundogeek.net/tutorial-python/"]python para todos[/URL]. Por lo menos los primeros 5 capítulos. Porque veo que tienes varios conceptos mezclados.

Otro consejo es que leas código, de otras personas para que veas como programan personas con mayor experiencia.

Incluso te dare un pequeño ejemplo.
Código Python:
Ver original
  1. class Jugador:
  2.     def __init__(self, nombre, equipo):
  3.         self.nombre = nombre
  4.         self.equipo = equipo
  5.  
  6.     def __str__(self):
  7.         return "Nombre: %s\nEquipo: %s" % (self.nombre, self.equipo)
  8.  
  9. class Record:
  10.     def __init__(self):
  11.         self.record = []
  12.  
  13.     def agregar_jugador(self, jugador):
  14.         self.record.append(jugador)
  15.  
  16.     def __str__(self):
  17.         if self.record:
  18.             s = '\n\n'.join(str(i) for i in self.record)
  19.         else:
  20.             return "\nRecord vacio\n"
  21.         return "\nRecord:\n%s\n" % s
  22.  
  23.  
  24. record = Record()
  25.  
  26. print record
  27.  
  28. nombre = raw_input("Nombre: ")
  29. equipo = raw_input("Equipo: ")
  30. jugador_1 = Jugador(nombre, equipo)
  31. record.agregar_jugador(jugador_1)
  32. print record
  33.  
  34. nombre = raw_input("Nombre: ")
  35. equipo = raw_input("Equipo: ")
  36. jugador_2 = Jugador(nombre, equipo)
  37. record.agregar_jugador(jugador_2)
  38. print record
Entiendo supongo que eso es mas avanzando, pero en estos tutoriales que son los que sigo:

http://www.youtube.com/watch?v=zGj8OjZtu5I

Se manejan de otra maneras las cosas, igual estoy leyendo python para todos par aintentar mejorar lo que se

pero con respecto a mi problema, no sabes porqeu ocurre? eso solo me falta saber

saludos
  #7 (permalink)  
Antiguo 04/03/2012, 13:55
zz_sioux
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda simple y rápida

lo que estas haciendo aquí exactamente es:

"uno".nombre

cuando lo que deberías hacer es

uno.nombre

Ese es tu error, tienes que diferenciar que uno es el identificador del registro, cuando "uno" es una cadena de texto.


Agrego, lo que hace razpeitia es la creación de una clase llamada jugador, pero en este caso la clase record es heredada por la clase Jugador para imitar un registro, ya que python carece de ellos.

Saludos

Última edición por zz_sioux; 04/03/2012 a las 14:00
  #8 (permalink)  
Antiguo 04/03/2012, 14:34
 
Fecha de Ingreso: febrero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Duda simple y rápida

Entendi lo de "uno", como hago para que funcione entonces?

debo convertir la variable uno en una cadena o como hago para que cuando un usuario inserte algo con raw_input sea uno y no "uno"?

Saludos
  #9 (permalink)  
Antiguo 04/03/2012, 15:30
zz_sioux
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda simple y rápida

claro, en este caso lo que deberías hacer es crear una lista que contenga a los jugadores, y acceder a ellos mediante indices, como lo explicó razpeitia, pero obviando el trabajo con clases y objetos:

lista = [uno,dos]

haces que el usuario deba ingresar un numero en vez de una cadena y luego accedes a ella mediante:

lista[int(jugador-1)].nombre

y si no puedes crearte un diccionario o una lista paralela,

dicc = {"uno":uno,"dos":dos} entonces cuando el usuario ingresa el nombre tu lo buscas aqui

dicc["uno"].nombre
  #10 (permalink)  
Antiguo 04/03/2012, 16:28
 
Fecha de Ingreso: febrero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Duda simple y rápida

Gracias intentaré con lo de las listas!

Etiquetas: dato, gui, ide, simple
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:09.