Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Оператор «or» в Python

Тимур Раджабов Ученик (159), открыт 1 неделю назад
a = input("Москва - столица РФ?")
if a == "Да" or "да":
print ("Правильно")
else:
print ("Не правильно")
Во-первых, это нихрена не работает, ведь даже когда a ≠ "Да" или "да" мне почему то всё равно возвращает true.
Во-вторых, явно есть другая возможность убрать зависимость от регистра букв.
Так вот почему это не работает, и какоц есть другой способ (если он есть)?
4 ответа
ブライス Мудрец (12192) 1 неделю назад
 a = input("Москва - столица РФ? ")
if a.lower() == "да":
print("Правильно")
else:
print("Не правильно")
Андрей Высший разум (462198) 1 неделю назад
Не работает потому, что:
 a == "Да" or "да" 
означает:
 (a == "Да") or ("да") 
и всегда истинно, т.к. в Python слабая типизация и любая непустая строка (в том числе, "да") автоматически преобразуется в True.

Если тебе надо проверить, что значение равно одному из значений списка, то это делается так:
 a in ["Да", "да"] 
или так:
 a == "Да" or a == "да" 
Тимур РаджабовУченик (159) 1 неделю назад
Спасибо!
Елисей СиловичУченик (237) 1 неделю назад
Что-то вы меня совсем запутали, выходит в С тоже слабая типизация? можно же написать вот так:
char* str1 = "да"; // непустая строка - true
char* str2 = ""; // пустая строка - false

if (str1) {
printf("Непустая строка true\n");
}
Андрей Высший разум (462198) Елисей Силович, В языке Python слабая динамическая типизация. В языке C очень слабая статическая типизация. Чем больше в языке неявных преобразований типов, тем слабее типизация. В языке C конструкция if (str1) { проверяет НЕ содержимое строки, а то, что указатель, присвоенный переменной str1, не равен NULL. Значения и str1, и str2 в твоём примере будут интерпретированы как true.
Рустам Абдрашитов Мыслитель (9542) 1 неделю назад
Проблема в вашем коде заключается в использовании оператора `or`. Выражение `if a == "Да" or "да":` интерпретируется как `if (a == "Да") or ("да")`, где `"да"` всегда будет оцениваться как истина, потому что непустая строка в Python считается истинной.

Чтобы исправить это, вы можете использовать метод строки `.lower()`, чтобы упростить сравнение без учета регистра. Вот исправленный код:
 a = input("Москва - столица РФ? ").strip()  
if a.lower() == "да":
print("Правильно")
else:
print("Не правильно")
Теперь ваш код будет правильно проверять ввод пользователя без учета регистра букв.
Тимур РаджабовУченик (159) 1 неделю назад
Спасибо!
ᅠ ᅠ Гуру (3657) 1 неделю назад
Тебе же вчера был дан ответ с использованием нужного метода.
 a = input("Москва столица РФ?")  
if a.casefold() == "да":
print("Правильно")
else:
print("Неправильно")
Можно также и lower использовать.

А если без использования данных методов, то условие нужно правильно прописать:
 if (a == "Да") or (a == "да"): 
Похожие вопросы