Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > не понимаю работу "if" и "or" :(


Автор: RM2010 5.2.2010, 15:21
По идее, если пользователь отвечает "Y" или "y", то stb отмечаем как True, в противном случае как False.

Код

if input("Additional 5% discount? ( Y/N )") == "Y" or "y":
    stb = True
else:
    stb = False
    
print(stb)


А в реальности:
Additional 5% discount? ( Y/N )dasjhdafsjkghdfkjsg
True

что не введи, всё равно выдаст True. smile 

Автор: Daevaorn 5.2.2010, 15:27
Код

inp = input("Additional 5% discount? ( Y/N )")

if inp == "Y" or inp == "y":
    pass

или
Код


if inp in ("Y", "y"):
    pass

Автор: RM2010 5.2.2010, 15:30
if inp == "Y" or inp == "y": СПАСИБООО! smile 

Автор: kemiisto 5.2.2010, 15:44
Код

if inp.lower() == 'y':
    pass

Автор: kemiisto 5.2.2010, 16:24
А всё почему? Потому, что
Цитата
You can use virtually any expression in a boolean context, and Python will try to determine its truth value.
 smile 

Непустая строка - оценивается как True. А что-то or True всегда True.

Идиотизм это называется. Не будь этой "фичи" мы бы получили ошибку времени исполнения (компиляции в других ЯП, использующих этот вид трансляции). А так - получаем логическую ошибку. А эти ошибки, как известно, отлавливать в разы труднее. Хорошо, когда вот так, 5-6 строчек. А в большом проекте?

И вообще, глупости всё это. Пустой список - False, непустой - True. Десяток символов пожалели?

Код
if len(my_list) == 0:
    pass


Hамеренья очевидны и не надо никаких подводных камней навроде boolean context.

Автор: Daevaorn 5.2.2010, 21:07
Цитата(kemiisto @  5.2.2010,  17:24 Найти цитируемый пост)
А в большом проекте?

Просто не надо допускать до больших проектов людей, не знающих базовую семантику языка.

Автор: Karadul 6.2.2010, 09:37
Только не input, а raw_input.
А то если юзер введет 5, то программа вылетит.
Скрытый текст
питонкапец++

Чето не вываливается. Я нихрена не понимаю!
Код
>>> if 1="Y": pass
  File "<stdin>", line 1
    if 1="Y": pass
        ^
SyntaxError: invalid syntax

Автор: Daevaorn 6.2.2010, 09:53
Цитата(Karadul @  6.2.2010,  10:37 Найти цитируемый пост)
Только не input, а raw_input.

У автора топика новый питон.
Цитата(Karadul @  6.2.2010,  10:37 Найти цитируемый пост)
Чето не вываливается. Я нихрена не понимаю!

Учите питон.

Автор: Karadul 6.2.2010, 11:51
Цитата
Учите питон.

Это такой универсальный ответ?

Автор: Daevaorn 6.2.2010, 12:06
Цитата(Karadul @  6.2.2010,  12:51 Найти цитируемый пост)
Это такой универсальный ответ? 

Для подобного рода вопросов и утверждений -- да. В этой и соседней ветке вы показываете полное незнание языка начиная от синтаксиса, но при этом пионерское стремление делать какие-то выводы. Поэтому смысла что-то объяснять не вижу. Как освоите хотя бы на начальном уровне язык то welcome -- можно будет обсудить интересующие вопросы.

Автор: Karadul 6.2.2010, 12:09
Цитата(Daevaorn @ 6.2.2010,  12:06)
Цитата(Karadul @  6.2.2010,  12:51 Найти цитируемый пост)
Это такой универсальный ответ? 

Для подобного рода вопросов и утверждений -- да. В этой и соседней ветке вы показываете полное незнание языка начиная от синтаксиса, но при этом пионерское стремление делать какие-то выводы. Поэтому смысла что-то объяснять не вижу. Как освоите хотя бы на начальном уровне язык то welcome -- можно будет обсудить интересующие вопросы.

Это уже больше похоже на хамство. Можно ссылку на соседнюю ветку?

Автор: kemiisto 6.2.2010, 13:24
Цитата(Daevaorn @  5.2.2010,  22:07 Найти цитируемый пост)
Просто не надо допускать до больших проектов людей, не знающих базовую семантику языка.

 smile А ещё не надо допускать до разработки новых языков программирования магистров математики и CS. smile 

Karadul, такую тему испортил...

Автор: Karadul 6.2.2010, 13:32
Я? Каким образом?

Все, допер. В консоли питоновской работать просто неудобно.
Daevaorn, а ты всетаки хам ;(

Автор: RM2010 7.2.2010, 12:21
Karadul, так ведь как Daevaorn сразу ответил ( за что ему еще раз большое спасибо ) , ошибка была в том, что питон не понимает выражение 
if X == "Y" or "y": , а надо ему растолковать if X == "Y" or х == "y": . smile 

Автор: _Viper_ 8.2.2010, 16:19
Цитата(RM2010 @  7.2.2010,  12:21 Найти цитируемый пост)
Karadul, так ведь как Daevaorn сразу ответил ( за что ему еще раз большое спасибо ) , ошибка была в том, что питон не понимает выражение if X == "Y" or "y": , а надо ему растолковать if X == "Y" or х == "y": .

Питон понимает это выражение, просто не так как ты  smile. Для решения подобных проблем изучать приоритеты операторов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)