Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2014 11:42:58

SLaVeRS9
От: Москва
Зарегистрирован: 2014-02-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл While

Здравствуйте! Недавно только изучать Питон начал, не могу понять
1) какой код лучше
2) почему код 1 работает криво
Код 1. Проблемма в том, что первый вопрос “Хотите печенье?” он обрабатывает, если нажимаю Да - перебрасывает на след вопрос, если “Нет” - выводит “Ой зря, ой зря”. На абракадабру он повторяет вопрос)
НО! когда я отвечаю на него “Да” то при переходе на след вопрос “Ты что, забыл что я тебе ее уже отдал? Да/Нет ” - что бы я не набирал, он выдвет мне “Больше конкретики”. Почему так? Почему первый цикл он работает норм, а на втором аналогичном - нет.

print ("Привет")
A=input("Хотите печенье? Да/Нет ")
while A!="Да" and A!="Нет":
    print("Больше конкретики")
    A=input("Хотите печенье? Да/Нет ")
if A=="Нет":
    print("Ой зря, ой зря..")
if A=="Да":
    А = input("Ты что, забыл что я тебе ее уже отдал? Да/Нет ")
    while A!="Да" and A!="Нет":
        print("Больше конкретики")
        А = input("Ты что, забыл что я тебе ее уже отдал? Да/Нет ")
    if A=="Нет":
        print("Ну а тогда чего просишь?")
    if A=="Да":
        print("Ну вот я напомнил")
print("Пока")
input()

И код 2. Тут, кстати, тоже почему то “косячит” с вопросом “Ты что, забыл что я тебе ее уже отдал?”
print ("Привет")
b=1
while b==1:
    b=0
    b1=0
    while b==0:
        A=input("Хотите печенье? Да/Нет ")
        if A=="Да":
            while b==0:
                А = input("Ты что, забыл что я тебе ее уже отдал? Да/Нет ")
                if A=="Да":
                    print("Ну вот я напомнил")
                    b=1
                elif A=="Нет":
                    print("Ну а тогда чего просишь?")
                    b=1
                else:
                    print ("Больше конкретики")
        elif A=="Нет":
            print("Ой зря, ой зря..")
            b=1
        else:
            print ("Больше конкретики")
    while b1==0:
        A=input("Еще? Да/Нет ")
        if A=="Да":
            b1=1
        elif A=="Нет":
            print ("")
            b1=1
            b=0
        else:
            print ("Больше конкретики")
print("Пока")
input()

Заранее благодарю за помощь

Офлайн

#2 Фев. 7, 2014 11:54:57

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Цикл While

Вам форум уже подсказал) Посмотрите как выделены A

Отредактировано noob_saibot (Фев. 7, 2014 11:56:07)

Офлайн

#3 Фев. 8, 2014 09:31:51

SLaVeRS9
От: Москва
Зарегистрирован: 2014-02-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл While

Да, а почему так происходит? Ведь я получается переприсваиваю А новое значение!
Как я понимаю, проблему можно решить вводя каждый раз новую переменную?

И какой код грамотней?)

Офлайн

#4 Фев. 8, 2014 12:40:02

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

Цикл While

Подсвечено потому что это не A англиийское, а А русское. Поэтому не надо называть переменные 1 буквой.

Офлайн

#5 Фев. 8, 2014 15:31:24

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Цикл While

SLaVeRS9

print ("Привет")
A=input("Хотите печенье? Да/Нет ")
while A!="Да" and A!="Нет":
    print("Больше конкретики")
    A=input("Хотите печенье? Да/Нет ")
    
if A=="Нет":
    print("Ой зря, ой зря..")
if A=="Да":
    A = input("Ты что, забыл что я тебе ее уже отдал? Да/Нет ")
    while A!="Да" and A!="Нет":
        print("Больше конкретики")
        A = input("Ты что, забыл что я тебе ее уже отдал? Да/Нет ")
    if A=="Нет":
        print("Ну а тогда чего просишь?")
    elif A=="Да":
        print("Ну вот я напомнил")
        
print("Пока")

И какой код грамотней?)
этот, ибо читается гораздо приятнее, не перегружен лишними переменными, имеется сборка мусора. да и вообще соответствует общей идеологии языка: чем проще и понятнее - тем лучше)

Да, а почему так происходит? Ведь я получается переприсваиваю А новое значение!
Как я понимаю, проблему можно решить вводя каждый раз новую переменную?
надо не забывать переключать раскладку, и вводить переменные в латинице (анлгицкими буквами).
использовать новые переменные в данном случае - лишнее

Офлайн

#6 Фев. 8, 2014 23:51:59

SLaVeRS9
От: Москва
Зарегистрирован: 2014-02-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл While

Огромное всем спасибо!
Разобрался

Офлайн

#7 Фев. 9, 2014 07:43:04

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

Цикл While

while A!="Да" and A!="Нет"
лучше писать так
 
while A not in ["Да", "Нет"]
а еще лучше
 
while A.upper() not in ["ДА", "НЕТ"]

Отредактировано PanovSergey (Фев. 9, 2014 07:44:51)

Офлайн

#8 Фев. 9, 2014 11:34:23

SLaVeRS9
От: Москва
Зарегистрирован: 2014-02-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Цикл While

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version