Python

Не работает код Python

Вообщем суть вопроса такова:
Если a не равняется условию, то цикл должен остановиться. Но тут когда я запускаю программу, то даже если я просто буду жать энтер или буду вводить рандомные слова, то он будет отвечать "Greetings to you!", а мне нужно, чтобы он это говорил только когда пользователь пишет что-то из условия, скажите в чём проблема?
У тебя выражение
 a == 'Hi' or 'hi' or 'Hello' or 'hello' 
вычисляет совсем не то, что ты думаешь.
Сначала вычисляется выражение
 a == 'Hi' 
Допустим, в переменной 'a' лежит фраза "незнаю, не играл" или "я дундук", что, в принципе, - синонимы. Тогда это сравнение даст False.
Тогда будет вычисляться следующий операнд or, и он выдаст 'hi', которое в переводе в логическое значение будет считаться True (потому что это - непустая строка). И на этом условие if выполнено.

Сравнить строку на принадлежность списку можно так:
 if a in { 'Hi', 'hi', 'Hello', 'hello' }: 
Здесь 4 строчки упакованы в множество, а поиск по множеству выполняется эффективнее, чем по списку.

Или можно сделать ещё короче, и заодно захватить все возможные комбинации регистра (hI, HI, hEllO и т.п.):
 if a.title() in { 'Hi', 'Hello' }: 

А условие цикла - заведомо не имеющее смысла. Либо проверяем в условии всю эту кухню с 'Hi' и 'Hello', либо делаем бесконечный цикл, а выход - через break:
 while True:
a = input()
if a in { 'Hi', 'hi', 'Hello', 'hello' }:
print('Greetings to you!')
else:
break
(и тогда a = 1 в начале программы - не нужно)
Худяков Матвей
Худяков Матвей
87 571
Лучший ответ
Сергей Суряков спс, работает
Из-за or. У меня такое же было. Попробуй ту строку заменить на эту:
 if a == str("Hi" or "hi") or str("Hello" or "hello"): 
Оразбай Абаев
Оразбай Абаев
8 642
Сергей Суряков Не, все также
Худяков Матвей Жесть какая-то. Ты хоть полистай чужие проекты на гитхабе, посмотри, как нормальные люди код пишут. Зачем так позориться?
Сергей Суряков Break за рамки цикла выходит