Foros del Web » Programando para Internet » Python »

problema con clases

Estas en el tema de problema con clases en el foro de Python en Foros del Web. bueno, este era mi primer inteto de clase, y me ha saido a medias : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código python: Ver original import random   class ...
  #1 (permalink)  
Antiguo 17/04/2010, 09:18
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
problema con clases

bueno, este era mi primer inteto de clase, y me ha saido a medias :
Código python:
Ver original
  1. import random
  2.  
  3. class palabra:
  4.     def __init__(self, palabra):
  5.         self.lista = []
  6.         self.palabra = palabra
  7.         self.mezclada = []
  8.         self.final = []
  9.  
  10.     def anyadir(self):
  11.         self.lista.append(palabra)
  12.  
  13.     def elegir(self):
  14.         self.mezclada = random.shuffle(self.lista)
  15.         self.final = self.mezclada[0]
  16.        
  17.  
  18. a = palabra('python')
  19. a.anyadir
  20. a.elegir
  21.  
  22. print a.lista, a.palabra, a.mezclada, a.final

y de lo que se supone que tendria que hacer solo me mete la palabra como atributo, nada mas ¿por qué?


muchas gracias
  #2 (permalink)  
Antiguo 17/04/2010, 20:34
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: problema con clases

debemos aclarar unas cosas:

1.- Anyadir y elegir son métodos en otras palabras funciones. Por lo que deben llevar "a.elegir()" paréntesis.

2.- En el método anyadir, donde esta palabra?

3.- random.shuffle desordena un arreglo de manera aleatoria en lugar, lo que significa que modifica la lista, no retorna una nueva lista desordenada.
  #3 (permalink)  
Antiguo 18/04/2010, 03:58
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problema con clases

muchas gracias, al final me ha quedado asi y ya va bien :
Código python:
Ver original
  1. import random
  2.  
  3. class palabra:
  4.     def __init__(self, palabra):
  5.         self.lista = ['hola']
  6.         self.palabra = palabra
  7.         self.final = []
  8.  
  9.     def anyadir(self):
  10.         self.lista.append(self.palabra)
  11.  
  12.     def elegir(self):
  13.         random.shuffle(self.lista)
  14.         self.final = self.lista[0]
  15.        
  16.  
  17. a = palabra('python')
  18. a.anyadir()
  19. a.elegir()
  20.  
  21. print a.lista, a.palabra, a.final
  #4 (permalink)  
Antiguo 18/04/2010, 11:39
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problema con clases

bueno, he querido seguir haciendo el programa y me ha salido esto:
Código python:
Ver original
  1. import random
  2.  
  3. class Palabra:
  4.     def __init__(self, palabra):
  5.         self.lista = ['hola']
  6.         self.palabra = palabra
  7.          
  8.         self.final = []
  9.  
  10.     def anyadir(self):
  11.         self.lista.append(self.palabra)
  12.  
  13.     def elegir(self):
  14.         random.shuffle(self.lista)
  15.         self.final = self.lista[0]
  16.  
  17.  
  18. class NoAdivinada:
  19.     def __init__(self, palabra):
  20.         self.palabra = palabra
  21.         self.rayas = '_' * palabra.__len__()
  22.         self.letra = ''
  23.         self.veces = 0
  24.         self.vidas = 5
  25.  
  26.     def pedir_letra(self):
  27.         self.letra = raw_input('¿que letra crees que es? ')
  28.         print self.letra
  29.  
  30.     def sustituir(self):
  31.         for i in range(len(self.palabra)):
  32.             if self.palabra[i] in self.letra:
  33.  
  34.                 self.rayas = self.rayas[:i] + self.palabra[i] + self.rayas[i+1:]
  35.                 self.veces = self.veces+1
  36.                 print 'bien, esta en la palabra'
  37.                
  38.  
  39.             else:
  40.                 self.vidas = self.vidas-1
  41.                 print 'ohh, te quedan', self.vidas, 'vidas', self.rayas
  42.  
  43.             break    
  44.  
  45.                              
  46.        
  47.  
  48. a = Palabra('python')
  49. a.anyadir()
  50. a.elegir()
  51. palabra = str(a.elegir())
  52.  
  53. sin_adivinar = NoAdivinada(palabra)
  54.  
  55. sin_adivinar.pedir_letra()
  56. sin_adivinar.sustituir()
  57.  
  58.  
  59.  
  60.  
  61. print a.lista, a.palabra, a.final

pero meta la letra que meta me salta al else en el metodo sustituir, ¿por que?

muchas gracias
  #5 (permalink)  
Antiguo 18/04/2010, 16:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: problema con clases

Hint (Pista):
a.elegir() no retorna nada.
  #6 (permalink)  
Antiguo 20/04/2010, 12:36
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problema con clases

bueno, he tratado de cambiar un poco el codigo:
Código python:
Ver original
  1. import random
  2.  
  3. class Palabra:
  4.     def __init__(self, palabra):
  5.         self.lista = ['hola']
  6.         self.palabra = palabra
  7.          
  8.         self.final = []
  9.  
  10.     def anyadir(self):
  11.         self.lista.append(self.palabra)
  12.  
  13.     def elegir(self):
  14.         random.shuffle(self.lista)
  15.         self.final = self.lista[0]
  16.         final = self.final
  17.         return final
  18.  
  19.  
  20. class NoAdivinada:
  21.     def __init__(self, palabra):
  22.         self.palabra = palabra
  23.         self.rayas = '_' * palabra.__len__()
  24.         self.letra = ''
  25.         self.veces = 0
  26.         self.vidas = 5
  27.  
  28.     def pedir_letra(self):
  29.         self.letra = raw_input('¿que letra crees que es? ')
  30.         print self.letra
  31.  
  32.     def sustituir(self):
  33.         for i in range(len(self.palabra)):
  34.             if self.palabra[i] in self.letra:
  35.  
  36.                 self.rayas = self.rayas[:i] + self.palabra[i] + self.rayas[i+1:]
  37.                 self.veces = self.veces+1
  38.                 print 'bien, esta en la palabra'
  39.                
  40.  
  41.             else:
  42.                 self.vidas = self.vidas-1
  43.                 print 'ohh, te quedan', self.vidas, 'vidas', self.rayas
  44.  
  45.             break    
  46.  
  47.                              
  48.        
  49.  
  50. a = Palabra('python')
  51. a.anyadir()
  52. a.elegir()
  53.  
  54. palabra2 = str(a.final)
  55. print palabra2
  56.  
  57. sin_adivinar = NoAdivinada(palabra2)
  58.  
  59. sin_adivinar.pedir_letra()
  60. sin_adivinar.sustituir()

pero me sigue sin funcionar, angun consejo sobre el error?
  #7 (permalink)  
Antiguo 22/04/2010, 08:46
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con clases

Si self.letra es una letra, y self.palabra es una palabra, recorrer cada letra de self.palabra para preguntar si pertenece a self.letra no es un buen método. No es claro, y lleva a errores extraños.

Mejor cambiá las líneas 33 y 34 arriba por:
Código Python:
Ver original
  1. if self.letra in self.palabra
Y en la que ahora es línea 36, cambiá self.palabra[i] por self.letra (que por la forma que estás comparándolas, te asegurás de que tienen el mismo valor)


Saludos.
  #8 (permalink)  
Antiguo 22/04/2010, 08:54
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problema con clases

muchas gracias, pero entonces para poner el valor i(con el que se en que posicion esta) ahora?

me refiero a esta linea:
Código python:
Ver original
  1. self.rayas = self.rayas[:i] + self.letra + self.rayas[i+1:]
  #9 (permalink)  
Antiguo 24/04/2010, 04:20
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problema con clases

he tratado de hacer una modicicacion del metodo sustituir pero sin exito:
Código python:
Ver original
  1. def sustituir(self):
  2.        
  3.         for i in range(0, self.longitud):
  4.        
  5.             if self.letra in self.palabra:
  6.  
  7.                 self.rayas = self.rayas[:i] + self.letra + self.rayas[i+1:]
  8.                 self.veces = self.veces+1
  9.                 print 'bien, esta en la palabra'
  10.                 break
  11.                
  12.  
  13.             else:
  14.                 self.vidas = self.vidas-1
  15.                 print 'ohh, te quedan', self.vidas, 'vidas', self.rayas
  16.                 break
ayuda por favooor
  #10 (permalink)  
Antiguo 24/04/2010, 16:52
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con clases

Para saber en qué posición de la palabra está la letra, quizás quieras usar find()


Saludos.

Última edición por AlvaroG; 25/04/2010 a las 02:07
  #11 (permalink)  
Antiguo 24/04/2010, 16:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: problema con clases

Error en link =(
  #12 (permalink)  
Antiguo 25/04/2010, 02:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con clases

Arreglado, de todas formas es simplemente la página de la documentación de python relativa a los métodos de los objetos de tipo cadena.


Saludos.
  #13 (permalink)  
Antiguo 25/04/2010, 02:52
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problema con clases

os amo a todos y a la documentacion de python :). el programa ya essta modificado convenientemente, ahora me queda modificarlo para las palabras con letras iguales puesto que find() devuelve solo la 1º vez que se encuentra, y el bucle del juego.
otra vez muchisimas gracias.

moraleja: la documentacion de python es bueeena

Etiquetas: clases
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 00:40.