:O no sabía yo hacer esto de validar tarjetas pero ahora que veo tu procedimiento te lías demasiado, pudiendo hacer un simple bucle con no mas de 3 variables, te lías con 16 variables :S
Edito -
Dejo masomenos como quedaría un poco más optimizado (y aun se puede optimizar más)
Código: Seleccionar todo
def validar(n):
if n[0] == "3":
tipo = "American Express"
elif n[0] == "4":
tipo = "Visa"
elif n[0] == "5":
tipo = "Mastercard"
elif n[0] == "6":
tipo = "Discover"
else:
tipo = "Desconocido"
longitud = len(n)
i=0
suma=0
while i==longitud-1:
if(i%2)==0:
suma = int(n[i])*2
if suma>9:
suma = suma - 9
o1 = o1 + suma
else:
o1 = o1 + int(n[i])
if longitud == 14:
if suma%10 == 0 and suma <=150:
sol = "Correcto"
else:
sol = "No correcto"
elif longitud == 15:
if suma%10 == 0 and suma <=150:
sol = "Correcto"
else:
sol = "No correcto"
elif longitud == 16:
if suma%10 == 0 and suma <=150:
sol = "Correcto"
else:
sol = "No correcto"
else:
sol = "Longitud incorrecta"
print "Tipo" ,tipo
print "Longitud" , longitud
print "Estado" ,sol
l = "---"
return l
entrada = raw_input("Numero ->")
operar = validar(entrada)
print operar
raw_input("...")
ahí ya no declaramos ochomil variables inútiles ;) ni escribimos la resta 8 veces a las variables, ni tenemos que sumar las ochomil variables al final :P todo nos queda en una sola ni tampoco tenemos que hacer dos if's para saber la longitud mejor hacemos el bucle hasta la longitud que es.
//mHmm..