| 
	
		|  Autor | Tema: Validar ingreso de datos con Python  (Leído 9,274 veces) |  
	| 
			| 
					
						| NOB2014 
								 
								
								 Desconectado 
								Mensajes: 366
								
								   | 
 
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. - 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
 
 |  
						| 
								|  |  
								|  |  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 | 
 
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 
								Mensajes: 122
								
								   | 
 
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 acaelif operacion == 2:    # tu codigo aca 
 etc... |  
						| 
								|  |  
								|  |  En línea | 
 
 null |  |  |  | 
			| 
					
						| NOB2014 
								 
								
								 Desconectado 
								Mensajes: 366
								
								   | 
 
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 = 0convertido = 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  |  
						| 
								|  |  
								|  |  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 | 
 
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 
 |  
						| 
								|  |  
								|  |  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 
								Mensajes: 1.286
								 
								No es lo mismo conocer el camino que recorrerlo.
								
								
								
								
								
								   | 
 
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,sysclass 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. |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| NOB2014 
								 
								
								 Desconectado 
								Mensajes: 366
								
								   | 
 
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 |  
						| 
								|  |  
								|  |  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.- |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Validar ingreso en bat Scripting
 | dj kuzmar | 1 | 4,383 |  3 Febrero 2010, 01:03 am por leogtz
 |  
						|   |   | AYUDA, VALIDAR DATOS Y EVITAR INYECCION EN FORMULARIO A BASE DE DATOS Desarrollo Web
 | antonioska | 4 | 8,095 |  1 Abril 2013, 00:39 am por antonioska
 |  
						|   |   | Validar ingreso correcto con mensaje en consola... .NET (C#, VB.NET, ASP)
 | DanielPy | 3 | 4,418 |  13 Mayo 2013, 19:37 pm por DanielPy
 |  
						|   |   | Validar ingreso de datos en C Sharp .NET (C#, VB.NET, ASP)
 | DanielPy | 3 | 3,603 |  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 | 11,488 |  18 Febrero 2016, 23:08 pm por fary
 |    |