Título: Validar ingreso de datos con Python
Publicado por: NOB2014 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 (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. - import os def sum(num1, num2): return num1+num2 def res(num1, num2): return num1-num2 def div(num1, num2): return num1/num2 def mul(num1, num2): return num1*num2 while True: op1=(float(input("\n Introduce el primer número...: "))) op2=(float(input("\n Introduce el segundo numero..: "))) print("\n ====================================") print("\n 1 - Suma\n 2 - Resta\n 3 - División\n 4 - Multiplicación\n ") operacion=(int(input("\n Introduce opción..: "))) if operacion == 1: print("\n " + str(op1) + " + " + str(op2) + " = ", sum(op1,op2)) if operacion == 2: print("\n " + str(op1) + " - " + str(op2) + " = ", res(op1,op2)) if operacion == 3: print("\n " + str(op1) + " / " + str(op2) + " = ", div(op1,op2)) if operacion == 4: print("\n " + str(op1) + " x " + str(op2) + " = ", mul(op1,op2)) print("\n ====================================") print("\n 1 - Otra operación\n 2 - Finalizar\n ") salSeg=(int(input("\n Introduce opción..: "))) if salSeg == 1: os.system('clear') else: break
Desde ya muchas gracias.- Un abrazo. Daniel
Título: Re: Validar ingreso de datos con Python
Publicado por: engel lex en 16 Octubre 2017, 21:17 pm
yo recomiendo if, ya que try-except te puede sopbrecomplicar una tarea simple
Título: Re: Validar ingreso de datos con Python
Publicado por: n1sen en 16 Octubre 2017, 23:31 pm
i if operacion == 1: print("\n " + str(op1) + " + " + str(op2) + " = ", sum(op1,op2)) if operacion == 2: print("\n " + str(op1) + " - " + str(op2) + " = ", res(op1,op2)) if operacion == 3: print("\n " + str(op1) + " / " + str(op2) + " = ", div(op1,op2)) if operacion == 4: print("\n " + str(op1) + " x " + str(op2) + " = ", mul(op1,op2)) print("\n ====================================") print("\n 1 - Otra operación\n 2 - Finalizar\n ") salSeg=(int(input("\n Introduce opción..: "))) if salSeg == 1: os.system('clear') else: break
Si quieres hacer una especie de menú, no pongas como lo hiciste, ponlo así: if operacion == 1: # tu codigo aca elif operacion == 2: # tu codigo aca
etc...
Título: Re: Validar ingreso de datos con Python
Publicado por: NOB2014 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.- numeros = puntos = otros = 0 convertido = 0.0 operando = input("\n Introduzca operando (No puede ser cero)...:") for i in operando: if i.isdigit() and i != '0': numeros +=1 elif i == '.': puntos +=1 elif i != '0': otros +=1 if numeros == 0 or puntos > 1 or otros > 0: print("\n No se puede convertir " , operando + " a float") else: convertido = float(operando) print("\n Operando convertido...: %.3f" % convertido)
Un abrazo. Daniel
Título: Re: Validar ingreso de datos con Python
Publicado por: engel lex 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 def input_float(text): value = input(text) import re #para usar regex if re.match("^\d*?(\.\d*)?$", value): return float(value) return False
ciertamente reviso y try catch en este caso no es tan mala opción (si se pone como una función independiente def input_float(text): try: return float(input(text)) except ValueError: return False
Título: Re: Validar ingreso de datos con Python
Publicado por: tincopasan 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: #-*-coding: utf -8 -*- import os,sys class Calculadora: def __init__(self): self.elecciones= { "1":self.sum, "2":self.res, "3":self.div, "4":self.mul, "5":self.salir, } def menu(self): print("=" * 25) #así sé con exactitud cuantos caracteres quiero imprimir print(" 1 - Suma\n 2 - Resta\n 3 - División\n 4 - Multiplicación\n 5 - Salir\n ") def ejecutar(self): while True: self.menu() eleccion= input("elige una opción: ") accion = self.elecciones.get(eleccion) if accion: accion() else: print("{} no es una elección válida".format(eleccion)) def validar(self): global num1,num2 con1=True while con1: try: num1= float(input("Ingrese el primer número: ")) con1= False except ValueError: print("El primer valor deber ser un número") con2=True while con2: try: num2= float(input("Ingrese el segundo número: ")) con2= False except ValueError: print("El segundo valor deber ser un número") def sum(self): print("Eligió SUMAR") self.validar() res=num1+num2 print("{} + {} = {}".format(num1,num2,res)) def res(self): print("Eligió RESTAR") self.validar() res=num1 - num2 print("{} - {} = {}".format(num1,num2,res)) def div(self): print("Eligió DIVIDIR") self.validar() if num1 == 0 or num2 == 0 : print("No se puede divividr por 0") else: res=num1 / num2 print("{} / {} = {}".format(num1,num2,res)) def mul(self): print("Eligió MULTIPLICAR") self.validar() res=num1 * num2 print("{} * {} = {}".format(num1,num2,res)) def salir(self): # ya que estás usando os agrego sys os.system("cls") msg=" Programa terminado " print(msg.center(28,"*")) os.system("pause") sys.exit(0) calc=Calculadora() calc.ejecutar()
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.
Título: Re: Validar ingreso de datos con Python
Publicado por: NOB2014 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. - value = input(text)
def input_float(text): import re #para usar regex if re.match("^\d*?(\.\d*)?$", text): return float(text) return False texto = input("\n Ingrese un número (puede ser con decimales...:) ") a = (input_float(texto)) if a == 0: print("\n No se puede convertir ", str(texto) + " a float") else: print("\n", str(a))
Saludos y gracias. Daniel
|