Validación de cadenas de entrada de usuario en Python

Así que he buscado casi todas las permutaciones de las palabras "cadena", "python", "validar", "entrada de usuario", etc., pero aún no he encontrado una solución que funcione para mí.

Mi objetivo es preguntar al usuario si desea o no iniciar otra transacción utilizando las cadenas "sí" y "no", y pensé que la comparación de cadenas sería un proceso bastante fácil en Python, pero algo no funciona. Correcto. Estoy usando Python 3.X, por lo que la entrada debería estar tomando una cadena sin usar una entrada en bruto, por lo que yo entiendo.

El programa siempre rechazará la entrada no válida, incluso cuando ingrese 'sí' o 'no', pero lo realmente extraño es que cada vez que ingrese una cadena de más de 4 caracteres o un valor int, lo considerará como positivo válido. Ingrese y reinicie el programa. No he encontrado una manera de obtener una entrada negativa válida.

endProgram = 0;
while endProgram != 1:

    #Prompt for a new transaction
    userInput = input("Would you like to start a new transaction?: ");
    userInput = userInput.lower();

    #Validate input
    while userInput in ['yes', 'no']:
        print ("Invalid input. Please try again.")
        userInput = input("Would you like to start a new transaction?: ")
        userInput = userInput.lower()

    if userInput == 'yes':
        endProgram = 0
    if userInput == 'no':
        endProgram = 1

También he intentado

while userInput != 'yes' or userInput != 'no':

Apreciaría enormemente no solo la ayuda con mi problema, sino que si alguien tiene alguna información adicional sobre cómo Python maneja las cadenas, eso sería genial.

Lo siento por adelantado si alguien más ya ha hecho una pregunta como esta, pero hice mi mejor esfuerzo para buscar.

¡Gracias a todos!

~ Dave

Respuestas a la pregunta(2)

Su respuesta a la pregunta