Foros del Web » Programando para Internet » Python »

problemas con instancia

Estas en el tema de problemas con instancia en el foro de Python en Foros del Web. Esta clase se encuentra dentro de la carpeta "clases" @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código valores: Ver original class valores:     def __init__(self, semilla):       ...
  #1 (permalink)  
Antiguo 22/10/2009, 09:28
 
Fecha de Ingreso: diciembre-2008
Ubicación: PERU
Mensajes: 294
Antigüedad: 15 años, 4 meses
Puntos: 23
Busqueda problemas con instancia

Esta clase se encuentra dentro de la carpeta "clases"

Código valores:
Ver original
  1. class valores:
  2.     def __init__(self, semilla):
  3.             self.s = semilla
  4.     def operar(self):
  5.             Yo = self.s
  6.             Xo = str(int(self.s)**2)
  7.             if True==(int((len(Xo)))%2.0==0):
  8.                 print "Yo=",str(Yo),"/","Xo",str(Xo),"X1=",str(Xo)
  9.             else:
  10.                 print "Yo=",str(Yo),"/","Xo",str(Xo),"X1=","0"+str(Xo)


Este ejecuta el programa:
Código Python:
Ver original
  1. import sys
  2. sys.path.append('clases')
  3. import valores
  4. semi = valores.valores(raw_input("Ingrese semilla: "))
  5. print semi.operar()

El error que me muestra es el siguiente:
Ingrese semilla: 1465
Traceback (most recent call last):
File "C:\Documents and Settings\Administrador\Escritorio\Nueva carpeta\principal.py", line 5, in <module>
print semi.operar()
File "clases\valores.py", line 7, in operar
if True==(int((len(x)))%2.0==0):
TypeError: object of type 'int' has no len()

>>>

Última edición por yuo2; 22/10/2009 a las 09:52
  #2 (permalink)  
Antiguo 22/10/2009, 09:34
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: problemas con instancia

¿Qué es lo que deseas hacer? len() no se puede usar con una variable 'int' como te indica el mensaje de error.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 22/10/2009, 09:44
 
Fecha de Ingreso: diciembre-2008
Ubicación: PERU
Mensajes: 294
Antigüedad: 15 años, 4 meses
Puntos: 23
Respuesta: problemas con instancia

Cita:
Iniciado por David Ver Mensaje
¿Qué es lo que deseas hacer? len() no se puede usar con una variable 'int' como te indica el mensaje de error.
Envio un numero por ejemplo: "1326"

con len() , hago que cuente el numero de digitos osea 4 , luego ese valor me aseguro si es par o impar con (4%2.0==00) , esto me dira si es True o Falso.
Si es True significa que es Par .. si es False es impar.
Pero en realidad tiene otra aplicacion; si es impar le agrego un 0 delante.

Aqui dejo un ejemplo del par e impar:
-------------------------------
>>> x = "14"
>>> if True==(int((len(x)))%2.0==0):
print "par"
else:
print "impar"
---------------------------------
  #4 (permalink)  
Antiguo 22/10/2009, 09:49
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: problemas con instancia

Para eso debes primero convertirlo a string:
Código Python:
Ver original
  1. print len(str(x))
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 22/10/2009, 09:59
 
Fecha de Ingreso: diciembre-2008
Ubicación: PERU
Mensajes: 294
Antigüedad: 15 años, 4 meses
Puntos: 23
Busqueda Respuesta: problemas con instancia

Cita:
Iniciado por David Ver Mensaje
Para eso debes primero convertirlo a string:
Código Python:
Ver original
  1. print len(str(x))
No me soluciono nada, leo ingles igual que tú pero esta vez no encuentro el error.. claro que dice que un valor int no puede ser leido por len(), ya eh intentando todo para ponerlo a str, pero nada..
Haber si pruebas mi codigo..
  #6 (permalink)  
Antiguo 22/10/2009, 10:16
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: problemas con instancia

Lo probé ahora con las modificaciones y funcionó sin problemas.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 22/10/2009, 10:50
 
Fecha de Ingreso: diciembre-2008
Ubicación: PERU
Mensajes: 294
Antigüedad: 15 años, 4 meses
Puntos: 23
Respuesta: problemas con instancia

Código python:
Ver original
  1. class valores:
  2.     def __init__(self, semilla):
  3.             self.s = semilla
  4.     def operar(self):
  5.             Yo = self.s
  6.             Xo = (str(int(self.s)**2))
  7.             if True==(int(len(Xo))&#37;2.0==0):
  8.                 print "Yo=",str(Yo),"/","Xo",str(Xo),"/","X1=",str(Xo)
  9.             else:
  10.                 print "Yo=",str(Yo),"/","Xo",str(Xo),"/","X1=","0"+str(Xo)

bueno al parecer tenia que cerrar el parentesis; (str(int(self.s)**2)) , lo demas anda bien..
Tema cerrado..

Última edición por AlvaroG; 23/10/2009 a las 07:31 Razón: resaltado de sintaxis
  #8 (permalink)  
Antiguo 23/10/2009, 07:49
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problemas con instancia

Creo que has exagerado un poco con las conversiones

- Línea 7: True== es innecesario y redundante. Deja esa línea como
Código python:
Ver original
  1. if (len(Xo) &#37; 2) = 0:
int(len()) es innnecesario, el tipo de dato que devuelve len() es un entero.
- Líneas 8 y 10: str(Xo) es innecesario ya que Xo es una cadena, definida en la línea 6.

De todas formas el if se puede cambiar por un formato de cadenas, ya que veo que solamente lo estás haciendo para agregar el 0 en caso de ser necesario:

Puedes sustituir la línea 5 por
Código python:
Ver original
  1. print "Yo=%(valorYo)s/Xo%(valorXo)s/X1=%(valorXo)02d" % { 'valorYo' : self.s, 'valorXo' : self.s**2 }

Básicamente lo que haces es sustituir el valor de Yo y de Xo cuando sea necesario.

%(valorXo)s => incluir el valor de valorXo, con formato de cadena (valorXo debe ser uno de los índices en el diccionario que sigue al %)
%(valorXo)02d => incluir el valor de valorXo, con formato de entero de (al menos) 2 dígitos. En caso de que valorXo sea de largo menor que 2, se agrega un 0 para 'rellenar'


Saludos.
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 04:23.