Строка while ans != "login" or 'register':
не делает то, что вы думаете. Сначала он оценивает ans != "login"
как True или False. Затем он оценивает 'register'
как True или False. Видите ли, 'регистр' всегда будет оценивать истину, потому что он непустой (python оценивает все непустые элементы как истинные в логическом контексте).
То, что вы хотите использовать, это:
while ans != "login" and ans != "register":
Вы также можете использовать:
while ans not in ["login", "register"]: