Foros del Web » Programando para Internet » Python »

[Consulta] Prohibir ingresar datos invalidos en Python

Estas en el tema de [Consulta] Prohibir ingresar datos invalidos en Python en el foro de Python en Foros del Web. Hola amigos! Estoy desarrollando mi primera pequeña aplicación en Python y tengo algunos problemas. Cabe destacar que estoy usando Python GUI y quisiera almacenar estos ...
  #1 (permalink)  
Antiguo 17/05/2009, 11:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Sonrisa [Consulta] Prohibir ingresar datos invalidos en Python

Hola amigos!
Estoy desarrollando mi primera pequeña aplicación en Python y tengo algunos problemas.
Cabe destacar que estoy usando Python GUI y quisiera almacenar estos datos solo mientras el programa corre, es decir, cuando pongo Run Module en la ventana de Python.

Trataré de explicarme lo más detalladamente posible.
La cuestión es que deseo crear una función que le brinde al usuario la posibilidad de elegir entre cuatro colores disponibles: Rojo, Azul, Negro y Blanco. El usuario debe escribir alguno de esos cuatros colores cuando la aplicacion lo requiera. Si escribe alguno de esos colores correctamente, se procede con el siguiente paso, si lo deja en blanco o escribe cualquier palabra excepto esos colores NO dejarlo pasar al siguiente paso que es el DNI.

Yo he creado el siguiente código:
Código:
personas=0
while personas<20:
    personas=personas+1
    print "ID. Persona:",personas
    color=""
    negro="negro"
    blanco="blanco"
    rojo="rojo"
    azul="azul"
    while color=="":
        color=raw_input ("Ingresar Color (Negro, Blanco, Rojo o Azul) ")
        if color==negro:
            print "-- CORRECTO. 'Negro' es un Color valido --"
        if color==blanco:
            print "-- CORRECTO. 'Blanco' es un Color valido --"
        if color==azul:
            print "-- CORRECTO. 'Azul' es un Color valido --"
        if color==rojo:
            print "-- CORRECTO. 'Rojo' es un Color valido --"
    dni=""
    while len(dni)<>8:
        dni=raw_input ("Ingresar DNI ")
        if dni=="":
            print "-- ERROR. El DNI debe contener 8 numeros. --"
Bien. ¿Qué pasa con esto? Si yo no escribo ningún dato, es decir si dejo el paso en blanco y presiono ENTER, me vuelve a decir que ingrese Color. Pero si escribo cualquier cosa, por ejemplo, safsdfs (y aquí está el problema) me deja seguir al paso siguiente. Y es eso lo que quiero evitar. Me gustaria que los usuarios solo deban ingresar un color valido de los que predefiní anteriormente (Rojo, Azul, Blanco, Negro) para que puedan proceder con el siguiente paso. Y si escriben un dato no valido quiero que vuelvan a repetir ese paso hasta escribir un dato valido.

Espero que puedan ayudarme, estoy cansado de probar variables y ninguna me funciona.

Desde ya, muchas gracias!

Saludos a toda la comunidad
  #2 (permalink)  
Antiguo 17/05/2009, 12:35
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Respuesta: [Consulta] Prohibir ingresar datos invalidos en Python

El problema esta en el while del color porque solo cuando es vacio se repite.

Lo que podrias hacer es repetir el bucle hasta que algo dentro del mismo lo detenga, por ejemplo:

Código python:
Ver original
  1. while True:

Y por cada color haces un break:
Código python:
Ver original
  1. if color==negro:
  2.     print "-- CORRECTO. 'Negro' es un Color valido --"
  3.     break
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #3 (permalink)  
Antiguo 18/05/2009, 23:03
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: [Consulta] Prohibir ingresar datos invalidos en Python

Gracias, me sirivió mucho!
Pero ahora me surgió otro problema...

En un determinado paso, el programa le pregunta al usuario el precio del producto. Ese precio nunca puede ser menor de 100 pesos y mayor de 600 pesos. Entonces, el codigo que yo utilizo es el siguiente:

Código:
precio=""
while precio>1000 and precio>3000:
     precio=input ("Ingresar Precio: ")
     print "El precio del producto es de",precio,"pesos"
Ahora este codigo ya no me funciona. Si ingreso un numero menor a mil me deja pasar al siguiente paso, cuando en realidad no debería ser así.

En la parte donde dice while precio>1000 and precio>3000, si comienzo a cambiar los signos "<" y ">" omite ese paso... creo que esa es la unica combinacion posible para que no lo omita.

Quisiera saber cuales serian las variables correctas a usar y como podria hacer funcionar ese código.

Desde ya, miles de gracias a todos.
  #4 (permalink)  
Antiguo 18/05/2009, 23:41
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Respuesta: [Consulta] Prohibir ingresar datos invalidos en Python

El problema esta en las condiciones...
Código python:
Ver original
  1. while precio>1000 and precio>3000:
es lo mismo que:
Código python:
Ver original
  1. while precio>3000:
Por lo tanto tu codigo deberia ser:
Código python:
Ver original
  1. while precio<1000 or precio>3000:
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #5 (permalink)  
Antiguo 19/05/2009, 15:16
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: [Consulta] Prohibir ingresar datos invalidos en Python

Miles de gracias dmassive!
Ese codigo No me funcionó. Tuve que hacer lo siguiente para que funcionara 'a medias':
Código:
    precio="3000"
    while precio > 3000:
        precio=input ("~~ Ingrese precio: ")
        precio=precio+precio*15/100
        if precio < 1000:
            print "-- ERROR. No existen precio menores a 1000 y mayores a 3000 --"
            precio=input ("~~ Ingrese precio: ")
        print "-- Todos los precio reciben un aumento del 15%. Ahora el precio es de",precio,"pesos --"
Este codigo no me deja introducir precios menores a 1000 ni mayores a 3000 y está bien que asi sea. En RUN MODULE, cuando pruebo el programa pongo, por ejemplo '23' en la parte de precio y me sale el mensaje de error correspondiente (ERROR. No existen precio menores a 1000 y mayores a 3000). En cambio si pongo '4000', si bien no me deja pasar al siguiente paso, se muestra el siguiente print: "-- Todos los precio reciben un aumento del 15%. Ahora el precio es de",precio,"pesos --" cuando en realidad deberia mostrar el mensaje de error anterior.

Me estoy partiendo la cabeza con esto y no se en que fallo!!! ¿Como hago para mostrar ese mismo mensaje de error (el que dice No existen precio menores a 1000 y mayores a 3000) cuando se introduce un numero mayor a 3000?
Saludos y disculpen mi ignorancia.

PD: gracias por tu paciencia dmassive !!!
  #6 (permalink)  
Antiguo 19/05/2009, 15:53
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Respuesta: [Consulta] Prohibir ingresar datos invalidos en Python

Me parece que planteas mal el pseudocodigo porque estas trabado en la misma situacion de condicionales. Quizas te conviene tomar un papel y dibujar como queres que funcione el programa. Hacer esto no es necesariamente de principiantes, hasta los mejores profesionales lo hacen ya que te deja ver mas claro aun de como funcionara tu programa.

Por ejemplo:


En todo caso tu programa seria asi:
Código python:
Ver original
  1. precio = 0
  2. while precio<1000 or precio>3000:    
  3.     precio=input ("~~ Ingrese precio: ")
  4.     precio=precio+precio*15/100    
  5.     if precio<1000 or precio>3000:
  6.         print "-- ERROR. No existen precio menores a 1000 y mayores a 3000 --"
  7.     else:
  8.         print "-- Todos los precio reciben un aumento del 15%. Ahora el precio es de",precio,"pesos --"
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #7 (permalink)  
Antiguo 19/05/2009, 20:58
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: [Consulta] Prohibir ingresar datos invalidos en Python

Nuevamente, Miles de Gracias dmassive! Me sirvió muchísimo tu ayuda y he aprendido bastante.
La próxima vez, voy a usar el pseudocódigo porque es realmente muy útil.
Agradezco tu paciencia :)
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 18:26.