¿Hay otra forma más sencilla de escribir código que básicamente verifique cada carácter de la cadena 'abcde'
if input == 'a' or input == 'ab' or input == 'abc' or input == 'abcd' or input == 'abcde': return TrueEsto debería hacer lo mismo que lo que pones.
return 'abcde'.startswith(input)Probablemente podrías intentar algo como esto:
def your_function(): # Add as much chars that you want here chars = "abcde" # Assuming you are taking the user input from terminal user_input = input() # Loop over every substring from chars for i in range(len(chars) + 1): if chars[:i] == user_input: return True return False¡Déjeme saber si esto ayuda!
No nombre las variables input , ya que sombreará la función incorporada input() . Se considera una mala práctica hacer esto, y lo suficientemente fácil como para elegir otro nombre de variable.
Podría usar un conjunto para verificar si la entrada coincide con alguna de las subcadenas:
lookups = {'a', 'ab', 'abc', 'abcd', 'abcde'} my_input = input() if my_input in lookups: return TrueTambién podríamos generar este conjunto usando una comprensión de conjuntos:
characters = 'abcde' lookups = {characters[:i] for i in range(1, len(characters) + 1)} my_input = input() if my_input in lookups: return TruePara grandes conjuntos de combinaciones, el beneficio de usar un conjunto sobre una lista es que obtiene búsquedas O(1) de tiempo constante para la búsqueda. Esto es mucho mejor que usar una lista, que le dará búsquedas lineales O(N) .
Hay múltiples formas lindas de hacerlo. startwith es probablemente el más eficiente, pero estos también deberían funcionar:
usando lstrip :
return 'abcde'.lstrip(input)!='abcde' usando list comprehension :
return any(['abcde'[:i+1] == input for i in range(len('abcde'))]) usando regex :
pattern = re.compile('^'+input) return bool(pattern.match('abcde'))o solo:
return 'abcde'[:len(input)]==inputPuedes probar esto:
If input in ['a', 'ab', 'abc', 'abcd', 'abcde']: return True else: return False