Найти - Пользователи
Полная версия: Не срабатывают условия
Начало » Центр помощи » Не срабатывают условия
1
fucking_vavilon
Здравствуйте! Я только начинаю изучать язык по видеоурокам и по результатам одного урока написал вот это:
user_data = str(input(“Do you remember everything? ”))
if user_data == “Yes” :
print(“Great! You are smart))”)
if user_data == “No” :
print(“Watch video number 5 again”)
if user_data != “Yes” or “No” :
print(“Error”)
Но не могу понять, почему при вводе “Yes” и “No”срабатывает 3 условие и выводиться “Error”.
И еще один вопрос: как прописать в условии не одно значение - (только) “Yes”, а сразу несколько, например, чтобы выполнялось тоже самое условие, но при вводе также “”yes“, ”Y“, ”y", то есть сделать данные фразы аналогичными

Вероятно для этого есть иные функции, но хотелось бы понять, как это сделать с помощью функции if, но если есть другой способ (легче, проще), то какую функцию нужно использовать?
py.user.next
vavilon
Но не могу понять, почему
vavilon
И еще один вопрос
 if user_data not in ('Yes', 'No'):
    ...
fucking_vavilon
py.user.next
Спасибо! Это работает, при условии двух постоянных: Yes и No. Но я попробовал ввести больше постоянных user_data и все слетает. Подскажите, в чем ошибка?

user_data = str(input(“Do you remember everything? ”))
if user_data == “Yes” and “yes” and “Y” and “y” :
print(“Great! You are smart))”)
if user_data == “No” or “no” or “N” or “n” :
print(“Watch video number 5 again”)
if user_data not in ('Yes', ‘yes’, ‘Y’, ‘y’, ‘No’, ‘no’, ‘N’, ‘n’):
print(“Error”)

При таком варианте и вводе любых других символов выполняется сразу два условия.
Do you remember everything? ghjk
Watch video number 5 again
Error

или даже так
Do you remember everything? Yes
Great! You are smart))
Watch video number 5 again

То есть я пробовал вводить больше постоянных значений и разделять их “and”, “or” и “,”.
Предполагаю, что я делаю какую-то дичь, но хочется разобраться и понять как это устроено
xam1816
код вставлять между этими тегами для правильного отображения на форуме
[code python]здесь пишется код[/code]
fucking_vavilon
Тогда еще раз…
Спасибо! Это работает, при условии двух постоянных: Yes и No. Но я попробовал ввести больше постоянных user_data и все слетает. Подскажите, в чем ошибка?

 user_data = str(input(Do you remember everything? ))
if user_data == Yes and yes and Y and y :
print(Great! You are smart)))
if user_data == No or no or N or n :
print(Watch video number 5 again)
if user_data not in ('Yes', yes, Y, y, No, no, N, n):
print(Error) 

При таком варианте и вводе любых других символов выполняется сразу два условия.
Do you remember everything? ghjk
Watch video number 5 again
Error

или даже так
Do you remember everything? Yes
Great! You are smart))
Watch video number 5 again

То есть я пробовал вводить больше постоянных значений и разделять их “and”, “or” и “,”.
Предполагаю, что я делаю какую-то дичь, но хочется разобраться и понять как это устроено
xam1816
  
user_data = str(input('Do you remember everything? '))
if user_data in ('Yes', 'yes', 'Y', 'y'):
    print('Great! You are smart))')
elif user_data in ('No', 'no' ,'N' ,'n'):
    print('Watch video number 5 again')
else:
    print('Error')
py.user.next
vavilon
Предполагаю, что я делаю какую-то дичь, но хочется разобраться и понять как это устроено
vavilon
  
if user_data == "Yes" and "yes" and "Y" and "y":
    ...
У операций есть приоритет. Когда операции находятсяв одном выражении, сначала выполняются одни операции, а потом уже выполняются другие операции.

Если расставить скобки, чтобы показать приоритет, то получится так
  
if ((((user_data == "Yes") and "yes") and "Y") and "y"):
    ...
Когда без скобок пишешь это, там эти скобки как будто есть невидимые.

Поэтому вот это, что ты подразумевал, надо писать вот так вообще
  
if user_data == "Yes" or user_data == "yes" or user_data == "Y" or user_data == "y":
    ...

Если расставить скобки, чтобы показать приоритет, то получится так
  
if ((((user_data == "Yes") or (user_data == "yes")) or (user_data == "Y")) or (user_data == "y")):
    ...
Сначала вычисляются самые глубокие скобки, потом вычисляются скобки чуть менее глубокие, потом вычисляются скобки на самой поверхности. Изнутри наружу оно идёт постепенно шаг за шагом.

У операций есть приоритет и есть очерёдность вычисления операндов. То есть операции ещё могут вычисляться слева направо, а могут справа налево. Есть также операции в математике, а есть операции в языках программирования. И они тоже могут быть одинаковыми, а могут не быть одинаковыми, хотя выглядят одинаково. Поэтому при работе с операциями в языке программирования надо сначала документацию по ним прочитать. Для питона она здесь.


tags: operations
fucking_vavilon
py.user.next
Сначала вычисляются самые глубокие скобки, потом вычисляются скобки чуть менее глубокие, потом вычисляются скобки на самой поверхности. Изнутри наружу оно идёт постепенно шаг за шагом.

У операций есть приоритет и есть очерёдность вычисления операндов. То есть операции ещё могут вычисляться слева направо, а могут справа налево. Есть также операции в математике, а есть операции в языках программирования. И они тоже могут быть одинаковыми, а могут не быть одинаковыми, хотя выглядят одинаково. Поэтому при работе с операциями в языке программирования надо сначала документацию по ним прочитать. Для питона она здесь.
Спасибо за текстовое объяснение принципов работы. Этого много где не хватает. Смотря на код, сложно понять принцип его работы, если он (принцип) тебе не известен. Не скажу, что изучение документации мне все объяснило, но я обязательно со временем пойму ее)))

В итоге я написал работающий код (исходя из того, что требовалось), но он оказался слишком громоздким, видимо из-за того, что мне еще не известен принцип работы оператора (или как это называется?) in, как написал xam1816

 user_data = str(input("Do you remember everything? "))
if user_data == "Yes":
    print("Great! You are smart))")
if user_data == "yes":
    print("Great! You are smart))")
if user_data == "Y":
    print("Great! You are smart))")
if user_data == "y":
    print("Great! You are smart))")
if user_data == "No":
    print("Watch video number 5 again")
if user_data == "no":
    print("Watch video number 5 again")
if user_data == "N":
    print("Watch video number 5 again")
if user_data == "n":
    print("Watch video number 5 again")
else:
    print("Error")
Пока я просто радуюсь, что и это работает так, как задумывалось.
И еще раз всем спасибо!
py.user.next
fucking_vavilon
не известен принцип работы оператора (или как это называется?) in
in - это операция.

Операция имеет операнды от одного до трёх обычно. Унарная, бинарная, тернарная.

Оператор - это оператор цикла while или оператор условия if.
Инструкция - отдельное действие в операторе.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB