Python не переходит в условие «else»

#python #if-statement #indentation

#python #if-statement #отступ

Вопрос:

Доброе утро,

Это мой 1-й пост здесь, и я только вытираю ноги в пуле программирования, поэтому, пожалуйста, будьте нежны 🙂

В его нынешнем виде я должен выполнить 2 условия (sadcat amp; great == да). Вместо этого я хочу сразу перейти к else (‘Зачем вы вообще начали эту игру? Кстати, это риторический вопрос.’), если 1-е условие не выполнено (sadcat == что-то еще, кроме «да») Я понятия не имею, почему это не работает… Мне кажется, что отступы в порядке. Любая помощь приветствуется

 sadcat = input('Do you like war? ')
great = input ('That's great but are you also a cat? ')


if sadcat == 'yes':
    if great == 'yes':
      print('ok I have no more questions')
    else:
      print('Not a cat ? How do you even live with yourself.')
else:
  print('Why did you even start this game in the first place? This is a rhetorical question btw.', end=" ")
 

Комментарии:

1. он работает так, как вы объяснили.

2. кажется, все работает нормально, какой ввод вы пробовали и какой результат вы ожидаете?

3. Ваш код отлично работает на моей машине, если я правильно понял ваш вопрос. Можете ли вы привести пример ввода и вывода, о котором идет речь, пожалуйста?

4. Если значение sadcat равно чему-то другому, кроме «да», я хочу, чтобы оно переходило прямо в эту строку: print(«Зачем вы вообще начали эту игру в первую очередь? Кстати, это риторический вопрос.’, end=» «) Однако он этого не делает, он переходит в «отличную» переменную, даже если я набираю что-то другое, кроме «да», на входе, я надеюсь, что я хорошо это объясняю

5. @JackLilhammers Точно! Я хочу, чтобы он не задавал 2-й вопрос, если 1-е условие не выполнено

Ответ №1:

Если вы хотите, чтобы «игра» завершилась, если «игроку» не нравится война, тогда первый if должен быть сразу после первого вопроса

 sadcat = input('Do you like war? ')
if sadcat == 'no':
    print('Why did you even start this game in the first place? This is a rhetorical question btw.', end=" ")
    exit()

great = input ('That's great but are you also a cat? ')
if great == 'yes':
    print('ok I have no more questions')
else:
    print('Not a cat ? How do you even live with yourself.')
 

Комментарии:

1. Спасибо за вашу помощь. Поэтому в принципе я не могу поместить одно IF после другого (потому что оба условия будут интерпретироваться одно за другим), я должен разделить их в разных блоках кода. Теперь имеет смысл.

2. Конечно, вы можете! Я просто избегаю вложенных блоков, потому что это более читабельно для меня

3. Вы можете сделать так, как предложил @khelwood, и вам не нужно разделять блоки

4. Понял. Но если я делаю вложенные блоки (как я делал в исходном коде — одно IF за другим IF), тогда интерпретатор будет переходить построчно, и я не получу желаемый результат, ваш код, безусловно, легче читать 🙂

Ответ №2:

таким образом, в основном код работает с ним, выполняя каждую строку в том порядке, в котором она написана. в вашем коде сначала вводится для sadcat, затем вводится для great.

только после этого он начинает оценивать sadcat. (ваш код верен. как только он дойдет до оценивающей части, он сразу перейдет к else)

если вы хотите, чтобы игра закончилась сразу после того, как пользователь введет что-либо, кроме «да»

 import sys

sadcat = input('Do you like war? ')
if sadcat != 'yes':
    print('Why did you even start this game in the first place? This is a rhetorical question btw.', end=" ")
    sys.exit() #this will terminate the program    

great = input ('That's great but are you also a cat? ')


if sadcat == 'yes':
    if great == 'yes':
      print('ok I have no more questions')
    else:
      print('Not a cat ? How do you even live with yourself.')
 

Комментарии:

1. Спасибо, аналогично решению Jack Lilhammers 🙂