Autor
|
Tema: Validar ingreso de datos con Python (Leído 8,590 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 aca elif 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 = 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
|
|
|
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,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.
|
|
|
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,063
|
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,937
|
1 Abril 2013, 00:39 am
por antonioska
|
|
|
Validar ingreso correcto con mensaje en consola...
.NET (C#, VB.NET, ASP)
|
DanielPy
|
3
|
3,880
|
13 Mayo 2013, 19:37 pm
por DanielPy
|
|
|
Validar ingreso de datos en C Sharp
.NET (C#, VB.NET, ASP)
|
DanielPy
|
3
|
3,262
|
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
|
10,648
|
18 Febrero 2016, 23:08 pm
por fary
|
|