Foros del Web » Programando para Internet » Python »

Error de codificación en un programa pequeño

Estas en el tema de Error de codificación en un programa pequeño en el foro de Python en Foros del Web. Esto es algo que lleva tiempo pasandome con algunos programas, no importa que declare el encoding utf-8 y todo el cuento, pero no puedo poner ...
  #1 (permalink)  
Antiguo 22/04/2012, 21:45
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Pregunta Error de codificación en un programa pequeño

Esto es algo que lleva tiempo pasandome con algunos programas, no importa que declare el encoding utf-8 y todo el cuento, pero no puedo poner acentos ni nada de eso (uso komodo-edit).

La cosa es que ando practicando un poco he hice un juego tonto de terminal (ando en xubuntu 11.10) este es el código:

Código Python:
Ver original
  1. #!/usr/bin/env python
  2. # -*- Coding: utf-8 -*-
  3. import random
  4. numero = random.randint(0,500)
  5. premio_neto = random.randint(100,2000)
  6. premio_total = premio_neto*50/100
  7. numero_ing = int(raw_input('Ingrese un numero'))
  8.  
  9. class juego_randomizado:
  10.  
  11.     def graficar(self, numero_ing, premio_neto, numero):
  12.         self.separador = '='*50
  13.         print '¡Bienvenido al juego mas tonto que existe, en el que sus posibilidades de ganar son minimas!\n El juego consiste en el sorteo de un numero al azar\n usted introduce un numero, si este coincide se lleva todo el premio\n si el numero sorteado es multiplo de 7 usted se lleva la mitad del premio\n pero si no coincide el numero o no es multiplo, pierde'
  14.         print self.separador
  15.         print 'Bien, ha ingresado el numero: %d \n El numero sorteado es: %d \n Y el premio es: %d'%(numero_ingresado, numero, premio_neto)
  16.         print self.separador
  17.  
  18.     def ganar_perder (self, numero, premio_neto, premio_total, numero_ing):
  19.         self.separador = '='*50
  20.         if numero_ing == numero:
  21.             print 'Usted ha ganado %d puntos ¡Felicidades, acaba de ser ridiculamente afortunado!'%(premio_neto)
  22.         elif numero%7==0:
  23.             print self.separador
  24.             print '¡Wow hay que tener suerte para que el numero sorteado sea multiplo de 7, te ganaste: %d puntos!'%(premio_total)
  25.             print self.separador
  26.         else:
  27.             print 'Uy, tienes una suerte de perro, no coincide, no es multiplo, y ¿A que no adivinas? ¡No ganas nada!'
  28.         print self.separador
  29.  
  30. def __init__(self):
  31.     self.graficar
  32.     self.ganar_perder

Y el error al tratar de ejecutar via terminal:

Código:
SyntaxError: Non-ASCII character '\xc2' in file numero_premio.py on line 13, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
  #2 (permalink)  
Antiguo 22/04/2012, 21:51
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Error de codificación en un programa pequeño

En la línea de coding es la primera letra con minúscula...

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 22/04/2012, 22:52
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Error de codificación en un programa pequeño

Bien ya me medio corre, aunque ahora simplemente me pide el que ingrese el numero pero luego de ahí se finaliza el programa, no se imprime nada de lo que tengo. Haré unas pruebas mañana por la mañana a ver si con eso lo hago funcionar y sino me paso por acá de nuevo.

Por ahora pasa esto:

nano@Shirley:~/Documentos/Code$ python numero_premio.py
Ingrese un numero: 30
nano@Shirley:~/Documentos/Code$

Y ya, no me sigue mostrando el programa.

Gracias por la ayuda hasta ahora.
  #4 (permalink)  
Antiguo 22/04/2012, 23:04
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: Error de codificación en un programa pequeño

Bueno es que tu programa por el momento todo lo que hacer unos cálculos y luego leer.

No veo por que estas usando clases si parece que no las necesitas y también veo que tienes mal indentado tu código.

Ademas de que __init__ no llamas a graficar ni a ganar_perder.
  #5 (permalink)  
Antiguo 23/04/2012, 08:05
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Error de codificación en un programa pequeño

La idea de usar clases y eso es simplemente para aprender a usarlas, no hay realmente una idea práctica detrás de ello.
  #6 (permalink)  
Antiguo 23/04/2012, 09:36
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error de codificación en un programa pequeño

Tenés varios problemas, muy simples:

- no estás invocando a los métodos, sino simplemente nombrándolos (te faltan los paréntesis)
- tu __init__ no está dentro de la clase, por lo que self no tiene sentido.
- aunque tu __init__ estuviese dentro de la clase, nunca estás creando un objeto de esa clase, por lo que no sería ejecutado.
  #7 (permalink)  
Antiguo 23/04/2012, 10:57
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Error de codificación en un programa pequeño

Me parece que es una maña de lenguajes como Java, puedes usar clases, pero no aprenderás si las usas así.

Saludos
__________________
Grupo Telegram Docker en Español
  #8 (permalink)  
Antiguo 24/04/2012, 09:39
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Error de codificación en un programa pequeño

Bueno leyendo lo que me dijeron y que un amigo me ayudó, pude acomodar el código para que funcionara, fuese mucho mas simple y quedara así:

Código Python:
Ver original
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import random
  4.  
  5. def ganar_perder (numero_ing):
  6.     separador = '='*100
  7.     if numero_ing == numero:
  8.         print 'Usted ha ganado %d puntos ¡Felicidades, acaba de ser ridiculamente afortunado!'%(premio_neto)
  9.     elif numero%7==0:
  10.         print separador
  11.         print '¡Wow hay que tener suerte para que el numero sorteado sea multiplo de 7, te ganaste: %d puntos!'%(premio_total)
  12.         print separador
  13.     else:
  14.         print 'Uy, tienes una suerte de perro, no coincide, no es multiplo, y ¿A que no adivinas? ¡No ganas nada!'
  15.         print separador
  16.  
  17.  
  18. numero = random.randint(0,500)
  19. premio_neto = random.randint(100,2000)
  20. premio_total = premio_neto*50/100
  21. separador = '='*100
  22. print '¡Bienvenido al juego mas tonto que existe, en el que sus posibilidades de ganar son minimas!\n El juego consiste en el sorteo de un numero al azar\n usted introduce un numero, si este coincide se lleva todo el premio\n si el numero sorteado es multiplo de 7 usted se lleva la mitad del premio\n pero si no coincide el numero o no es multiplo, pierde'
  23. print separador
  24. numero_ing = int(raw_input('Ingrese un numero: ')) 
  25. print 'Bien, ha ingresado el numero: %d \n El numero sorteado es: %d \n Y el premio es: %d'%(numero_ing, numero, premio_neto)
  26. print separador
  27. ganar_perder(numero_ing)

La clase no tenia sentido y una de las funciones tampoco, bastaba solo con una función que validara ganar o perder.

Ahora quiero ampliar un poquito el programa, quiero validar que lo que el usuario introduzca sea un número entero comprendido entre 0 y 500. Ya se como frenarlo si es mayor a 500 pero no se como validar si es un numero entero.

Gracias por la ayuda
  #9 (permalink)  
Antiguo 24/04/2012, 10:59
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Error de codificación en un programa pequeño

Mira el capitulo de excepciones en la documentación oficial, el segundo ejemplo hace lo que quieres:

http://docs.python.org/tutorial/errors.html

Saludos
__________________
Grupo Telegram Docker en Español
  #10 (permalink)  
Antiguo 24/04/2012, 12:48
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Error de codificación en un programa pequeño

Bueno yo anduve investigando un poco y conseguí una manera, aunque la verdad funciona a medias... Funciona a medias porque si se cumple que el numero introducido es entero, el programa sigue su curso sin el más mínimo problema, pero sino, lanza un error de esos de sintaxis y lo que quiero es que lance un mensaje, aquí el código:

Código Python:
Ver original
  1. numero_ing = int(raw_input('Ingrese un numero: '))
  2. if type(numero_ing).__name__=='int':
  3.     print 'Bien, ha ingresado el numero: %d \n El numero sorteado es: %d \n Y el premio es: %d'%(numero_ing, numero, premio_neto)
  4.     print separador
  5.     ganar_perder(numero_ing)
  6. else:
  7.     print '¡Hey, tienes que introducir un número!'
  #11 (permalink)  
Antiguo 24/04/2012, 12:50
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Error de codificación en un programa pequeño

Vuelve a leer el link que te pasé
__________________
Grupo Telegram Docker en Español
  #12 (permalink)  
Antiguo 24/04/2012, 13:01
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Error de codificación en un programa pequeño

Cita:
Iniciado por Carlangueitor Ver Mensaje
Vuelve a leer el link que te pasé
En eso estoy pero soy malo en el inglés, tenme paciencia xD
  #13 (permalink)  
Antiguo 24/04/2012, 13:02
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Error de codificación en un programa pequeño

Es más, no leas, ve el código
__________________
Grupo Telegram Docker en Español
  #14 (permalink)  
Antiguo 24/04/2012, 13:17
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Error de codificación en un programa pequeño

Cita:
Iniciado por Carlangueitor Ver Mensaje
Es más, no leas, ve el código
Ya voy entendiendo, voy a probarlo al llegar a casa, porque ando en el celular ahora. Gracias
  #15 (permalink)  
Antiguo 24/04/2012, 13:20
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: Error de codificación en un programa pequeño

En ese caso lee el capitulo de excepciones de python para todos, esta en español por si el idioma es un problema.

Etiquetas: ide, programa
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 15:11.