Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для BaklanichBaklan
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11

Проблема с условиями в Python

23.10.2019, 00:00. Показов 2269. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, закончил колледж на техническое обслуживание и ремонт РЭА и понял что 4 лет это не стоило и можно было за полгода больше получить если бы нормально учили, но была еще специальность программиста и подумал неделю назад что вполне могу изучить и эту специальность и при чем сам если с той все так растянуто было. Так вот, прошу прощения если я задал глупый или неуместный вопрос, но я честно не понимаю. Не нашел в интернете нормального объяснения или не понял зачем нужно elif.

Решил написать простенькую программу
Будет спрашивать погоду, ответ будет Да или Нет.
В случае некорректного ответа будет заново спрашивать.
Как ее написать что б она работала я понимаю, но я не понимаю почему именно в таком виде она не работает.

Если ответ "Да"

на моменте первого if цикл должен прекратиться ведь наличие ответа есть! и написать "Отлично!". но он не
прекращается а идет до else, воспринимает это как отсутствие ответа и всё заново.


При ответе "Нет" все норм и он отвечает "Грустно"

Вот ее код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
otvet2 = False # переменная, которая отвечает за наличие ответа. она в самом начале потому, что дальше идет в цикле ссылка на неё, и она уже должна быть объявлена
print ("Седня хорошая погода??")
def gey():
    global otvet # назначаем переменную otvet глобальной, что нам дает использование ее вне функции
    otvet = input("Ответ:") # переменная, которая отвечает за содержание ответа
    
 
gey()
 
while otvet2 != True: # Цикл, отвечающий за проверку корректного ответа
 
    if otvet == "Да": # Ответ да, подразумевает наличие ответа
        otvet = True 
        otvet2 = True # тут цикл должен закончиться если ответ "Да", otvet2 - true, см условие
    if otvet == "Нет":
        otvet = False
        otvet2 = True # тут цикл заканчивается при наличии ответа "Нет"
    else:
        print ("Отвечай") 
        otvet2 = False # тут цикл не заканчивается а выполняется заново, так как наличие ответа false
        gey()
    
 
if otvet == True: # ну и тут собсна сами ответы на твой ответ
    print ("Отлично!")
if otvet == False:
    print ("Грустно :(")
# проблема в том что цикл при ответе "Да" не заканчивается, хотя значение otvet2 меняется на true, что должно дать команду циклу while остановиться. но он этого не делает.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2019, 00:00
Ответы с готовыми решениями:

Проблема с условиями
Здравствуйте у меня возникла такая проблема я в данный момент делаю 2D игру (В Unity 2018) и при создани скрипта атаки у меня возникли...

Проблема со условиями?
У меня возник такая проблема написал код разрешающий вход на другую форму если пароль или логин неверный то вылетает MessageBox. Почему...

Проблема с условиями!
Вообщем, у меня курсовая тест ПДД. Тест читается с ini файла, и мне надо вывести изображение на image по определенному клику( у меня есть...

9
 Аватар для BaklanichBaklan
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11
23.10.2019, 03:43  [ТС]
Я так понимаю что цикл в любом случае идет дальше, даже если условие уже выполнено? почему он так делает? почему цикл не останавливается на присваивании переменной
Python
1
otvet2 = True
??

Нарисовал картиночку что б проще было объяснить.
Миниатюры
Проблема с условиями в Python  
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
23.10.2019, 04:09
потому что:
в цикле while:
после первого if - у тебя выполняется второй
а если ответить на вопрос Да - то, выполняется ветка else
в которой ты пишешь:
otvet2 = False
таким образом, весь этот бред - хорошо не заканчивается:

console output:
Седня хорошая погода??
Ответ:Да
Отвечай
Ответ:Ху
Отвечай
Ответ:Нет
Грустно
0
 Аватар для BaklanichBaklan
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11
23.10.2019, 04:46  [ТС]
потому что:
в цикле while:
после первого if - у тебя выполняется второй
Так ведь он не должен выполняться если условие уже выполнилось, если переменная уже равна True, почему он переходит ко второму if?? не понимаю :-(
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
23.10.2019, 05:03
так работает:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
responded = False # переменная, которая отвечает за наличие ответа. она в самом начале потому, что дальше идет в цикле ссылка на неё, и она уже должна быть объявлена
print ("Седня хорошая погода??")
def gey():
    global otvet # назначаем переменную otvet глобальной, что нам дает использование ее вне функции
    otvet = input("Ответ:") # переменная, которая отвечает за содержание ответа
    
 
gey()
while responded != True:
  if (otvet == "Да") or (otvet == "Нет"):
      responded = True
  else:
      print ("Отвечай")
      gey()    
if otvet == "Да": 
    print ("Отлично!") 
if otvet == "Нет":
    print ("Грустно :(")
Добавлено через 5 минут
Цитата Сообщение от BaklanichBaklan Посмотреть сообщение
Так ведь он не должен выполняться
смотри внимательно какие именно otvet - ты сравниваешь и с чем.
у тебя выполнялось else - потому что Нет - это не Да и поэтому Да - тоже зацикливалось.
У тебя же всё перед глазами
0
 Аватар для BaklanichBaklan
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11
23.10.2019, 14:34  [ТС]
у тебя выполнялось else - потому что Нет - это не Да и поэтому Да - тоже зацикливалось.
Так вот в это и вопрос. Почему оно выполнялось, если otvet2 при ответе "Да" сменяется на True и условие выполняется. А он зачем то идёт дальше, хотя должен остановиться. У Пайтона правило такое проверять все, даже если условие цикла выполнилось?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
23.10.2019, 14:39
Лучший ответ Сообщение было отмечено BaklanichBaklan как решение

Решение

BaklanichBaklan, ты либо не читаешь, что тебе пишут либо не понимаешь написанного. Давай заново, вот про это
Цитата Сообщение от BaklanichBaklan Посмотреть сообщение
тут цикл должен закончиться если ответ "Да"
ну вот кто тебе сказал такую гадость? ты прочел главу про циклы в книге? Цикл заканчивается только на строке проверки условия (там где while или for) или при команде break, больше он нигде не заканчивается и продолжает выполнять все построчно. Учим матчасть!
1
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,306
23.10.2019, 14:47
BaklanichBaklan, вы просто перемудрили и поэтому запутались. зачем создавать флаги и глобальную переменную
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def gey():
    otvet = input("Ответ: ")
    return otvet
 
 
print ("Седня хорошая погода??")
while True:
    otvet = gey()
    if otvet == "Да":
        print ("Отлично!")
        break
    elif otvet == "Нет":
        print ("Грустно :(")
        break
    print ("Отвечай  Да или Нет")
1
 Аватар для BaklanichBaklan
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11
23.10.2019, 17:13  [ТС]
. Ну вот кто тебе сказал такую гадость? ты прочел главу про циклы в книге? Цикл заканчивается только на строке проверки условия (там где while или for) или при команде break, больше он нигде не заканчивается и продолжает выполнять все построчно. Учим матчасть!
Благодарю! Именно это я и хотел понять, честно нигде эту информацию так четко написанную не нашел, по моему этому мало внимания уделено в учебниках. Если я вместо второго if в своем коде напишу elif - она выполняется как надо. Это происходит потому, что сейчас отсутствует логическая цепочка "else", "если что то кроме да". И в ней уже должно быть "если нет".? То есть else относится только к тому if, которое стоит непосредственно перед этим else?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
23.10.2019, 17:16
Цитата Сообщение от BaklanichBaklan Посмотреть сообщение
То есть else относится только к тому if, которое стоит непосредственно перед этим else?
конечно, для этого и формируем блоки, чтобы было понятно к чему что относится. Выше вам Семеныч хороший вариант написал
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2019, 17:16
Помогаю со студенческими работами здесь

Проблема с python 2 и python 3
def find Smallest(a r r): smallest = arr С· ··· smallest_index = 0 """"". for i in range(l, len(arr)): if arr < smallest: ...

Проблема в Python
Возникла проблема, при выборе g5 и подобных сток в white, не удаётся заменить первый символ цифрой, как исправить? white = input() ...

Проблема с кодировкой c Python 2.7.x
Мяч (ООП) На основе книги "Hello World!" Уоррен Сэнд, Картер Сэнд В контексте объяснения, что такое self некоторые строки...

Проблема с кодом на Python
Скрипт не видит лог файл DropsSummoner.log, он должен после каждого обновления файла DropsSummoner.log, отправлять последнюю строчку на...

Возникла проблема с Python
Возникла проблема с написанием калькулятора не хочет запускать код, якобы все правильно написано, кто может помочь?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru