Найти - Пользователи
Полная версия: Цикл While
Начало » Python для новичков » Цикл While
1
SLaVeRS9
Здравствуйте! Недавно только изучать Питон начал, не могу понять
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()

Заранее благодарю за помощь
noob_saibot
Вам форум уже подсказал) Посмотрите как выделены A
SLaVeRS9
Да, а почему так происходит? Ведь я получается переприсваиваю А новое значение!
Как я понимаю, проблему можно решить вводя каждый раз новую переменную?

И какой код грамотней?)
PanovSergey
Подсвечено потому что это не A англиийское, а А русское. Поэтому не надо называть переменные 1 буквой.
bs0d
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("Пока")

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

Да, а почему так происходит? Ведь я получается переприсваиваю А новое значение!
Как я понимаю, проблему можно решить вводя каждый раз новую переменную?
надо не забывать переключать раскладку, и вводить переменные в латинице (анлгицкими буквами).
использовать новые переменные в данном случае - лишнее
SLaVeRS9
Огромное всем спасибо!
Разобрался
PanovSergey
while A!="Да" and A!="Нет"
лучше писать так
 
while A not in ["Да", "Нет"]
а еще лучше
 
while A.upper() not in ["ДА", "НЕТ"]
SLaVeRS9
PanovSergey
Возьму на заметку! В учебнике не видел таких вариантов, может позже появятся
Спасибо!
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