elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Validar ingreso de datos con Python
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Validar ingreso de datos con Python  (Leído 8,021 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Validar ingreso de datos con Python
« en: 16 Octubre 2017, 19:14 pm »

Hola amigos, ¿como están?.
Tengo una duda con el código que dejo a continuación, con estos videos estoy aprendiendo a programar en python:https://www.youtube.com/watch?v=2MaAs7XU2T0 y he llegado a las excepciones, la consulta es como resulta más conveniente validar los datos ingresado por teclado, utilizando try/except o con if, para validar un dato float no se debe permitir el ingreso de otra cosa que no sean números del 0 al 9 y que las variables op1 y op2 no pueden valer cero, creo que es todo -
Otra cosita, me podrían dar alguna idea para mejorar el código. -

Código
  1. import os
  2.  
  3. def sum(num1, num2):
  4. return num1+num2
  5.  
  6. def res(num1, num2):
  7. return num1-num2
  8.  
  9. def div(num1, num2):
  10. return num1/num2
  11.  
  12. def mul(num1, num2):
  13. return num1*num2
  14.  
  15. while True:
  16. op1=(float(input("\n Introduce el primer número...: ")))
  17. op2=(float(input("\n Introduce el segundo numero..: ")))
  18.  
  19. print("\n ====================================")
  20. print("\n 1 - Suma\n 2 - Resta\n 3 - División\n 4 - Multiplicación\n ")
  21. operacion=(int(input("\n Introduce opción..: ")))
  22.  
  23. if operacion == 1:
  24. print("\n " + str(op1) + " + " + str(op2) + " = ",  sum(op1,op2))
  25. if operacion == 2:
  26. print("\n " + str(op1) + " - " + str(op2) + " = ",  res(op1,op2))
  27. if operacion == 3:
  28. print("\n " + str(op1) + " / " + str(op2) + " = ",  div(op1,op2))
  29. if operacion == 4:
  30. print("\n " + str(op1) + " x " + str(op2) + " = ",  mul(op1,op2))
  31.  
  32. print("\n ====================================")
  33. print("\n 1 - Otra operación\n 2 - Finalizar\n ")
  34. salSeg=(int(input("\n Introduce opción..: ")))
  35.  
  36. if salSeg == 1:
  37. os.system('clear')
  38. else:
  39. break


Desde ya muchas gracias.-
Un abrazo. Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Validar ingreso de datos con Python
« Respuesta #1 en: 16 Octubre 2017, 21:17 pm »

yo recomiendo if, ya que try-except te puede sopbrecomplicar una tarea simple


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
n1sen

Desconectado Desconectado

Mensajes: 122



Ver Perfil
Re: Validar ingreso de datos con Python
« Respuesta #2 en: 16 Octubre 2017, 23:31 pm »



Código
  1. i
  2. if operacion == 1:
  3. print("\n " + str(op1) + " + " + str(op2) + " = ",  sum(op1,op2))
  4. if operacion == 2:
  5. print("\n " + str(op1) + " - " + str(op2) + " = ",  res(op1,op2))
  6. if operacion == 3:
  7. print("\n " + str(op1) + " / " + str(op2) + " = ",  div(op1,op2))
  8. if operacion == 4:
  9. print("\n " + str(op1) + " x " + str(op2) + " = ",  mul(op1,op2))
  10.  
  11. print("\n ====================================")
  12. print("\n 1 - Otra operación\n 2 - Finalizar\n ")
  13. salSeg=(int(input("\n Introduce opción..: ")))
  14.  
  15. if salSeg == 1:
  16. os.system('clear')
  17. else:
  18. break

Si quieres hacer una especie de menú, no pongas como lo hiciste, ponlo así:
Código
  1. if operacion == 1:
  2.    # tu codigo aca
  3. elif operacion == 2:
  4.    # tu codigo aca
  5.  
etc...
En línea

null
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Validar ingreso de datos con Python
« Respuesta #3 en: 17 Octubre 2017, 19:14 pm »

Hola n1sen me quedó una duda con tu sugerencia, debo suponer que ¿si pongo todos if el programa leerá las 4 instrucciones aunque la primera de verdadero? y si pongo if/elif ¿ocurrirá lo contrario?.-
Por último dejo unas cuantas lineas de código que hace lo que pretendía y parece no tener fallas.-

Código
  1. numeros = puntos = otros = 0
  2. convertido = 0.0
  3.  
  4. operando = input("\n Introduzca operando (No puede ser cero)...:")
  5.  
  6. for i in operando:
  7. if i.isdigit() and i != '0':
  8. numeros +=1
  9. elif i == '.':
  10. puntos +=1
  11. elif i != '0':
  12. otros +=1
  13.  
  14. if numeros == 0 or puntos > 1 or otros > 0:
  15. print("\n No se puede convertir " , operando + " a float")
  16. else:
  17. convertido = float(operando)
  18. print("\n Operando convertido...: %.3f" % convertido)
  19.  
Un abrazo.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Validar ingreso de datos con Python
« Respuesta #4 en: 17 Octubre 2017, 19:42 pm »

2 formas para validar, una con if y otra con try

para la primera forma (if) es bueno saber que formatos acepta float como validos, estos son
Código:
1
1.0
1. -> 1.0
.1 -> 0.1

Código
  1. def input_float(text):
  2.  value = input(text)
  3.  import re #para usar regex
  4.  if re.match("^\d*?(\.\d*)?$", value):
  5.    return float(value)
  6.  return False
  7.  

ciertamente reviso y try catch en este caso no es tan mala opción (si se pone como una función independiente

Código
  1. def input_float(text):
  2.  try:
  3.    return float(input(text))
  4.  except ValueError:
  5.    return False
  6.  
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Validar ingreso de datos con Python
« Respuesta #5 en: 17 Octubre 2017, 23:17 pm »

lo primero que te aclaro es que python permite trabajar de distintas formas y salvo algunas excepciones no hay una mejor que otra, lo que si se sabe decir es que un script es a la vieja escuela o la nueva.
usando básicamente tu código lo modifique para que veas otra forma:

Código
  1. #-*-coding: utf -8 -*-          
  2. import os,sys
  3. class Calculadora:
  4.    def __init__(self):
  5.        self.elecciones= {
  6.            "1":self.sum,
  7.            "2":self.res,
  8.            "3":self.div,
  9.            "4":self.mul,
  10.            "5":self.salir,
  11.             }
  12.  
  13.    def menu(self):
  14.        print("=" * 25) #así sé con exactitud cuantos caracteres quiero imprimir
  15.        print(" 1 - Suma\n 2 - Resta\n 3 - División\n 4 - Multiplicación\n 5 - Salir\n ")
  16.  
  17.    def ejecutar(self):
  18.        while True:
  19.            self.menu()
  20.            eleccion= input("elige una opción: ")
  21.            accion = self.elecciones.get(eleccion)
  22.            if accion:
  23.                accion()
  24.            else:
  25.                print("{} no es una elección válida".format(eleccion))
  26.  
  27.    def validar(self):
  28.        global num1,num2
  29.        con1=True
  30.        while con1:
  31.            try:
  32.                num1= float(input("Ingrese el primer número: "))
  33.                con1= False
  34.            except ValueError:
  35.                print("El primer valor deber ser un número")
  36.        con2=True
  37.        while con2:
  38.            try:
  39.                num2= float(input("Ingrese el segundo número: "))
  40.                con2= False
  41.            except ValueError:
  42.                print("El segundo valor deber ser un número")    
  43.  
  44.    def sum(self):
  45.        print("Eligió SUMAR")
  46.        self.validar()
  47.        res=num1+num2
  48.        print("{} + {} = {}".format(num1,num2,res))
  49.  
  50.    def res(self):
  51.        print("Eligió RESTAR")
  52.        self.validar()
  53.        res=num1 - num2
  54.        print("{} - {} = {}".format(num1,num2,res))        
  55.  
  56.  
  57.    def div(self):
  58.        print("Eligió DIVIDIR")
  59.        self.validar()
  60.        if num1 == 0 or num2 == 0 :
  61.            print("No se puede divividr por 0")
  62.        else:    
  63.            res=num1 / num2
  64.            print("{} / {} = {}".format(num1,num2,res))        
  65.  
  66.  
  67.    def mul(self):
  68.        print("Eligió MULTIPLICAR")
  69.        self.validar()
  70.        res=num1 * num2
  71.        print("{} * {} = {}".format(num1,num2,res))        
  72.  
  73.    def salir(self):        # ya que estás usando os agrego sys
  74.        os.system("cls")
  75.        msg=" Programa terminado "
  76.        print(msg.center(28,"*"))
  77.        os.system("pause")
  78.        sys.exit(0)    
  79.  
  80. calc=Calculadora()
  81. calc.ejecutar()
  82.  
me parece muy bien que uses distintas funciones para cada cosa(agregué algunas), como dicen es mejor dividir un problema en partes más pequeñas.
En cuanto a tantos if o elif no es que no se pueda o deba usarlos, pero para eso están los diccionarios, que vienen a ser como los select o switch de otros lenguajes(por si programas en alguno de ellos).
Después como ya te dijo engel lex podés usar para verificaciones distintas formas dependiendo de lo que busques, para algo más complejo sin lugar a dudas usar re, en este caso es simple así que no es tan necesario.
Saludos.

En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Validar ingreso de datos con Python
« Respuesta #6 en: 18 Octubre 2017, 18:01 pm »

Hola engel lex, tengo 2 dudas con respecto a tú código, la primer es con expresiones regulares que no tengo ni idea como funcionan pero eso es para más adelante, lo que quisiera saber es si es estrictamente necearía esta línea de código porque me da error y si la saco el programa funciona perfectamente. -

Código
  1. value = input(text)

Código
  1. def input_float(text):
  2. import re #para usar regex
  3. if re.match("^\d*?(\.\d*)?$", text):
  4. return float(text)
  5. return False
  6.  
  7. texto = input("\n Ingrese un número (puede ser con decimales...:) ")
  8.  
  9. a = (input_float(texto))
  10.  
  11. if a == 0:
  12. print("\n No se puede convertir ", str(texto) + " a float")
  13. else:
  14. print("\n", str(a))
  15.  

Saludos y gracias.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Validar ingreso en bat
Scripting
dj kuzmar 1 3,833 Último mensaje 3 Febrero 2010, 01:03 am
por leogtz
AYUDA, VALIDAR DATOS Y EVITAR INYECCION EN FORMULARIO A BASE DE DATOS
Desarrollo Web
antonioska 4 6,333 Último mensaje 1 Abril 2013, 00:39 am
por antonioska
Validar ingreso correcto con mensaje en consola...
.NET (C#, VB.NET, ASP)
DanielPy 3 3,450 Último mensaje 13 Mayo 2013, 19:37 pm
por DanielPy
Validar ingreso de datos en C Sharp
.NET (C#, VB.NET, ASP)
DanielPy 3 3,002 Último mensaje 14 Julio 2013, 04:04 am
por DanielPy
Validar ingreso de cadena y de números en lenguaje C.
Programación C/C++
NOB2014 7 9,886 Último mensaje 18 Febrero 2016, 23:08 pm
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines