(Python 3.5) Problema al manejar excepciones

Iniciado por BigKaz, 15 Diciembre 2016, 22:17 PM

0 Miembros y 1 Visitante están viendo este tema.

BigKaz

Código (python) [Seleccionar]
try:                                                                                          
nm1 = input("MESA 1: Ingresa nombre de 1er jugador: ")
except KeyboardInterrupt:
while True:
try:
limpiar()
nm1 = input("MESA 1: Ingresa nombre de 1er jugador: ")
break
except KeyboardInterrupt:
continue                          
while len(nm1)>20 or not nm1.isalpha() or len(nm1)<=2:
try:
nm1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
while len(nm1)>20 or not nm1.isalpha() or len(nm1)<=2:
nm1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
limpiar()
break
except KeyboardInterrupt:
limpiar()
continue
limpiar()
try:                                                                                          
ap1 = input("MESA 1: Ingresa apellido de 1er jugador: ")
except KeyboardInterrupt:
while True:
try:
limpiar()
ap1 = input("MESA 1: Ingresa apellido de 1er jugador: ")
break
except KeyboardInterrupt:
continue                          
while len(ap1)>20 or not ap1.isalpha() or len(ap1)<=2:
try:
ap1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
while len(ap1)>20 or not ap1.isalpha() or len(ap1)<=2:
ap1 = input("Demasiados car. (min 3 y max 20) o car. invalido, ingrese otra vez: ")
limpiar()
break
except KeyboardInterrupt:
limpiar()
continue


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

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

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

tincopasan

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 (python) [Seleccionar]

#-*- coding: utf -8- -*-
def verifica(nn):
    valida= False
    if len(nn) <=2:
        print("Debe tener más de 2 caracteres")
    elif len(nn) > 20:
        print("Debe tener un máximo de 20 caracteres")
    elif not nn.isalpha():
        print("Hay algún caracter inválido")
    else:
        valida = True
        return valida   
nombre= False
while not nombre:
    try:
        nm1 = input("MESA 1: Ingresa nombre de 1er jugador: ")
        if verifica(nm1):
            nombre=True
    except KeyboardInterrupt:
        continue
apellido= False
while not apellido:
    try:
        ap1 = input("MESA 1: Ingresa apellido de 1er jugador: ")
        if verifica(ap1):
            apellido=True
    except KeyboardInterrupt:
        continue

otra cosa no creas que el CTRL-C funciona igual en todos los sistemas