Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: BigKaz en 15 Diciembre 2016, 22:17 pm



Título: (Python 3.5) Problema al manejar excepciones
Publicado por: BigKaz en 15 Diciembre 2016, 22:17 pm
Código
  1. try:                                                                                          
  2. nm1 = input("MESA 1: Ingresa nombre de 1er jugador: ")
  3. except KeyboardInterrupt:
  4. while True:
  5. try:
  6. limpiar()
  7. nm1 = input("MESA 1: Ingresa nombre de 1er jugador: ")
  8. break
  9. except KeyboardInterrupt:
  10. continue                          
  11. while len(nm1)>20 or not nm1.isalpha() or len(nm1)<=2:
  12. try:
  13. nm1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
  14. while len(nm1)>20 or not nm1.isalpha() or len(nm1)<=2:
  15. nm1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
  16. limpiar()
  17. break
  18. except KeyboardInterrupt:
  19. limpiar()
  20. continue
  21. limpiar()
  22. try:                                                                                          
  23. ap1 = input("MESA 1: Ingresa apellido de 1er jugador: ")
  24. except KeyboardInterrupt:
  25. while True:
  26. try:
  27. limpiar()
  28. ap1 = input("MESA 1: Ingresa apellido de 1er jugador: ")
  29. break
  30. except KeyboardInterrupt:
  31. continue                          
  32. while len(ap1)>20 or not ap1.isalpha() or len(ap1)<=2:
  33. try:
  34. ap1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
  35. while len(ap1)>20 or not ap1.isalpha() or len(ap1)<=2:
  36. ap1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
  37. limpiar()
  38. break
  39. except KeyboardInterrupt:
  40. limpiar()
  41. continue

Tengo un problema al intentar poner el apellido del jugador 1, por ejemplo:

Código
  1. MESA 1: Ingresa nombre de 1er jugador: elhacker
  2. MESA 1: Ingresa apellido de 1er jugador:  """Pulso Ctrl+C para invocar a la excepcion KeyboardInterrupt. Deberia mostrar lo
  3. mismo y consultarme el apellido del primer jugador pero..."""
  4. MESA 1: Ingresa nombre de 1er jugador: """Aqui como que se devuelve y me pregunta el nombre del 1er jugador pero esta asignando
  5. mi entrada a la del apellido del jugador 1, deberia preguntarme el apellido."""
  6.  
             

Alguien sabe cual es el error y como lo soluciono??
Gracias.
PD: En las etiquetas geshi se ve el indentando mas largo, le hize copy-paste a mi codigo y quedo asi. En mi editor el indentando esta bien


Título: Re: (Python 3.5) Problema al manejar excepciones
Publicado por: tincopasan en 19 Diciembre 2016, 01:04 am
la verdad que este código me parece muy repetitivo y nada claro, para el usuario o el programador, hice basicamente lo mismo pero de otra forma simple y para mi gusto más legible.
Código
  1. #-*- coding: utf -8- -*-
  2. def verifica(nn):
  3.    valida= False
  4.    if len(nn) <=2:
  5.        print("Debe tener más de 2 caracteres")
  6.    elif len(nn) > 20:
  7.        print("Debe tener un máximo de 20 caracteres")
  8.    elif not nn.isalpha():
  9.        print("Hay algún caracter inválido")
  10.    else:
  11.        valida = True
  12.        return valida    
  13. nombre= False
  14. while not nombre:
  15.    try:
  16.        nm1 = input("MESA 1: Ingresa nombre de 1er jugador: ")
  17.        if verifica(nm1):
  18.            nombre=True
  19.    except KeyboardInterrupt:
  20.        continue
  21. apellido= False
  22. while not apellido:
  23.    try:
  24.        ap1 = input("MESA 1: Ingresa apellido de 1er jugador: ")
  25.        if verifica(ap1):
  26.            apellido=True
  27.    except KeyboardInterrupt:
  28.        continue
  29.  
otra cosa no creas que el CTRL-C funciona igual en todos los sistemas