¿Qué está pasando con mi declaración if-else? (Python 3.3)

Estoy escribiendo declaraciones condicionales para un proyecto de programa de facturación. Es un poco avanzado para un principiante que conozco, pero agradezco el desafío. De todos modos, planeo iniciar el programa con la solicitud de nombre de usuario y contraseña. Así que esta es mi primera codificación para el programa.

print ("Hello and welcome to Billing Pro, please enter your username and password to access the database.")

username = input ("Enter username:")

if username == "cking" or "doneal" or "mcook":
  print ("Valid username.")
else:
  print ("Invalid username. Please try again.") 


password = input ("Enter password:")

if password == "rammstein1" or "theory1" or "tupac1":
  print ("Valid password. User has been verified.")
else:
  print ("Invalid password. Access denied.")

Ahora, al principio, cuando ejecuté este código, si hubiera escrito algo distinto a las tres opciones para el nombre de usuario, Python imprimió la línea de "nombre de usuario no válido". Por alguna razón, ahora está imprimiendo un 'nombre de usuario válido' y luego continúa con la solicitud de contraseña. Además, si ingreso algo que no sean las opciones para las contraseñas, siempre leerá el mensaje "contraseña válida".

También, ¿cómo hago un bucle en el indicador de nombre de usuario cuando el usuario ingresa algo distinto a las tres opciones? ¿Debo utilizar una instrucción while en lugar de if-else o puedo colocar una instrucción while al final de la instrucción if-else para activar la solicitud nuevamente?

Ah, y sé que no se puede decir porque mi formato de mierda en la pregunta, pero usé la sangría adecuada en el script en sí.

Respuestas a la pregunta(4)

Su respuesta a la pregunta