TODOPIC

Lenguajes de programación para PC => Python => Mensaje iniciado por: Daniel1952 en 16 de Octubre de 2017, 13:18:35

Título: Python:Validar ingreso de datos.
Publicado por: Daniel1952 en 16 de Octubre de 2017, 13:18:35
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. -

Código: Python
  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
Título: Re:Python:Validar ingreso de datos.
Publicado por: Picuino en 17 de Octubre de 2017, 12:19:52
Hola Daniel,

Las excepciones se suelen utilizar cuando una instrucción puede dar error inesperado, no para validar datos.

Por ejemplo, si quieres evitar la división por cero, puedes hacerlo de dos formas.

Una es comprobar el divisor y si vale cero, no dividir e imprimir error:

Código: Python
  1. a = 10
  2. for d in [2, 1, 0]:
  3.    print('\ndivide {} por {}'.format(a, d))
  4.    if d == 0:
  5.       print('   error: División por cero')
  6.    else:      
  7.       b = a / d
  8.       print('  igual a {}'.format(b))

Otra es con una excepción:

Código: Python
  1. a = 10
  2.  
  3. for d in [2, 1, 0]:
  4.    print('\ndivide {} por {}'.format(a, d))
  5.    try:
  6.       b = a / d
  7.       print('  igual a {}'.format(b))
  8.    except ZeroDivisionError:
  9.       print('   error: División por cero')

Saludos.
Título: Re:Python:Validar ingreso de datos.
Publicado por: Picuino en 17 de Octubre de 2017, 12:25:10
Deberías comenzar a utilizar la función main()
Para salir del programa simplemente usas return en main()

Código: Python
  1. def main():
  2.    while True:
  3.       print('Hola mundo')
  4.       opt = int(input(' 1: Salir '))
  5.       if opt == 1:
  6.          return
  7.  
  8. main()
Título: Re:Python:Validar ingreso de datos.
Publicado por: Picuino en 17 de Octubre de 2017, 12:44:09
Creo que en tu mensaje te refieres a esto:

Código: Python
  1. def to_int(x):
  2.    try:
  3.       return int(x)
  4.    except:
  5.       None

Saludos.
Título: Re:Python:Validar ingreso de datos.
Publicado por: Daniel1952 en 17 de Octubre de 2017, 14:37:36
Hola Picuino, no te das una idea lo que agradezco cada vez que veo una respuesta de Udes. Por Dios cuanto se aprende, gracias amigo, gracias a todos. -
Con respecto a tus códigos voy a repasarlo unas cuantas veces y si me queda alguna duda te consulto, lo que me intriga por el momento es la función main, no la veo mucho en los ejemplos de videos y manuales, ¿me podrías dar algo de teoría al respecto?.-
Por último dejo mi código que parece no tener fallas, parece.-

Código: Python
  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)

Un abrazo.
Daniel
Título: Re:Python:Validar ingreso de datos.
Publicado por: Picuino en 17 de Octubre de 2017, 16:30:40
main es una función como cualquier otra.

Conviene utilizarla como función principal, la primera que se llama.
Es simplemente una convención para agrupar el código mejor.

Saludos.
Título: Re:Python:Validar ingreso de datos.
Publicado por: Picuino en 17 de Octubre de 2017, 16:35:08
Te aconsejo que comiences a hacer programas reales. Es más útil y divertido.

Por ejemplo leer un fichero de texto y contar el número de palabras que contiene.
O imprimir todos los ficheros con extensión *.py que hay en el directorio actual.
O renombrar todos los ficheros *.jpg para que su nombre siempre comience por la fecha de creación.
O leer una página web e imprimir un resumen.
O cualquier otra cosa que se te ocurra.

Saludos.

Título: Re:Python:Validar ingreso de datos.
Publicado por: Daniel1952 en 17 de Octubre de 2017, 17:27:57
Te cuento el porque de mi deseo en aprender a programar, desde que conocí las bases de datos de Foxpro me apasionaron (esas cosas que te ocurren en la vida y no le encontrás explicación o si) y me puse a estudiar C para hacer mis propias tablas/bases de datos y después de un largo periodo es como que me resultó un tanto frustrante y lo deje y me puse a estudiar python que realmente tiene una sintaxis amigable y tengo muchas ganas de aprender a programar con este lenguaje, luego veré si retomo C (eso de trabajar cerca de la memoria me atrae muchísimo), te cuento todo esto porque te darás una idea como quiero aprender a manejar los archivos con python pero todavía no llegue a ese video, seguramente estará más adelante. -

Un saludo.
Daniel
Título: Re:Python:Validar ingreso de datos.
Publicado por: Picuino en 18 de Octubre de 2017, 11:05:20
Es bastante sencillo para empezar.
Si buscas la instrucción open, encontrarás muchos ejemplos.

Un saludo.
Título: Re:Python:Validar ingreso de datos.
Publicado por: Picuino en 18 de Octubre de 2017, 11:12:34
Código: Python
  1. file = open('words.txt', 'r')
  2. texto = file.read()
  3. file.close()
  4.  
  5. words = {}
  6. for word in texto.split():
  7.     if word not in words:
  8.         words[word] = 1
  9.     else:
  10.         words[word] += 1
  11.  
  12. for word, count in words.items():
  13.     print(word, ' ', count)