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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте, закончил колледж на техническое обслуживание и ремонт РЭА и понял что 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2019, 00:00
Ответы с готовыми решениями:

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

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

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

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

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

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

console output:
Седня хорошая погода??
Ответ:Да
Отвечай
Ответ:Ху
Отвечай
Ответ:Нет
Грустно
0
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11
23.10.2019, 04:46  [ТС] 4
потому что:
в цикле while:
после первого if - у тебя выполняется второй
Так ведь он не должен выполняться если условие уже выполнилось, если переменная уже равна True, почему он переходит ко второму if?? не понимаю :-(
0
530 / 180 / 38
Регистрация: 18.08.2012
Сообщений: 904
23.10.2019, 05:03 5
так работает:
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
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11
23.10.2019, 14:34  [ТС] 6
у тебя выполнялось else - потому что Нет - это не Да и поэтому Да - тоже зацикливалось.
Так вот в это и вопрос. Почему оно выполнялось, если otvet2 при ответе "Да" сменяется на True и условие выполняется. А он зачем то идёт дальше, хотя должен остановиться. У Пайтона правило такое проверять все, даже если условие цикла выполнилось?
0
Автоматизируй это!
Эксперт Python
7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29
23.10.2019, 14:39 7
Лучший ответ Сообщение было отмечено BaklanichBaklan как решение

Решение

BaklanichBaklan, ты либо не читаешь, что тебе пишут либо не понимаешь написанного. Давай заново, вот про это
Цитата Сообщение от BaklanichBaklan Посмотреть сообщение
тут цикл должен закончиться если ответ "Да"
ну вот кто тебе сказал такую гадость? ты прочел главу про циклы в книге? Цикл заканчивается только на строке проверки условия (там где while или for) или при команде break, больше он нигде не заканчивается и продолжает выполнять все построчно. Учим матчасть!
1
4941 / 3293 / 1141
Регистрация: 21.03.2016
Сообщений: 8,078
23.10.2019, 14:47 8
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
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 11
23.10.2019, 17:13  [ТС] 9
. Ну вот кто тебе сказал такую гадость? ты прочел главу про циклы в книге? Цикл заканчивается только на строке проверки условия (там где while или for) или при команде break, больше он нигде не заканчивается и продолжает выполнять все построчно. Учим матчасть!
Благодарю! Именно это я и хотел понять, честно нигде эту информацию так четко написанную не нашел, по моему этому мало внимания уделено в учебниках. Если я вместо второго if в своем коде напишу elif - она выполняется как надо. Это происходит потому, что сейчас отсутствует логическая цепочка "else", "если что то кроме да". И в ней уже должно быть "если нет".? То есть else относится только к тому if, которое стоит непосредственно перед этим else?
0
Автоматизируй это!
Эксперт Python
7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29
23.10.2019, 17:16 10
Цитата Сообщение от BaklanichBaklan Посмотреть сообщение
То есть else относится только к тому if, которое стоит непосредственно перед этим else?
конечно, для этого и формируем блоки, чтобы было понятно к чему что относится. Выше вам Семеныч хороший вариант написал
1
23.10.2019, 17:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2019, 17:16
Помогаю со студенческими работами здесь

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

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

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

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

Проблема с задачей Python
В общем код точно рабочий, просто из-за функций необходимых для автотеста, он не работает. в данный...

python проблема с кодом
Traceback (most recent call last): File "D:\pythonproject\testgame1.py", line 209, in <module> ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru