Все привыкли использовать while, как он есть. Но многие пропускают дополнительную возможность, о которой многие даже и не слышали. #python #while #tricks
Читайте официальную документацию к выбранному языку программирования и не будет никогда пробелов в знаниях. Автору благодарность за то, что прочитал доку раньше других и оповестил всех.
В Python 3.13 разрабы хотят от нее хотят избавиться уже, тк не интуитивная штука (даже если знаешь), в реальных задачах middle/senior такое не используют. Поэтому знайте, если встретится, но сами не используйте)))
for тоже вроде бы поддерживает такую конструкцию. Поколение пайтон точно содержит об этом упоминание. Гвидо говорил про эту конструкцию что не стал бы ее вводить, создавай он язык по новой
Если кто не знал, такая конструкция работает и с циклом for. Если цикл завершится, потому что закончились элементы, то будет выполняться блок кода после else. А если цикл завершится оператором break, то блок кода после else выполняться не будет.
Подожди. А разве после цикла while нельзя просто написать if(a==3): print("цикл завершён") По идеи когда а достигнет 3 цикл будет завершён правильно и все напишется. Изменено: Ахринеть оно поддерживает Else. Не знал. Спасибо за инфу автору.
@@PythonGuru_ согласен, тем более, что первые 2 части бесплатны, но его особенность - это довольно таки большое количество математики для курса по программированию
Узнал недавно пытаясь пересобрать нумерацию в словаре с кастомным интерфейсом tkinter, типа там есть click1 click2 click3, если удаляешь click2 то словарь пересобирается и получается click1 click2, и уже click 2 будет со значением click3, прикол был если удалял click1, то не работало.
Синтаксический сахарок, как же без него. Без else кста код будет выглядеть так: a = 0 while a < 4: print(a) a += 1 if a == 2: print("завеошено на 2") elif a == 4: print("цикл завершен полность")
После перехода с Lua на Python мне было сложно разобраться как заканчивать циклы и тому подобное, пытался понять что ставить вместо end в конце, в Lua можно весь код без отступов написать и будет работать
В других языках можно завести boolean переменную, которая равна true по-умолчанию, а в условии перед break можно присвоить этой переменной false Если переменная == true, но цикл завершился полностью.
Интересно смотреть такие задачи. Только меня смущает иногда один ньанс, практическое применение. Я в целом знаю базу питона и несколько модулей хорошо, ещё несколько среднее, н ци по мелочи. Вообщем чуть выше новичка. Но мне вот например не понятно, какую задачу данная конструкция решает?) Для меня это выглядит примерно так. Невероятно!!? все работает так как я и написал, просто глазам не верится) Правда я знал, что можно использовать else вместе с while)
@@PythonGuru_ действительно, все просто. Хороший вы программист, а я видимо неочень пока)) Наверное стоило сильнее свой аналитический аппарат напрячь. Спасибо! Не мне вас учить, и наверняка формат шортс слабо подходит, но еслиб этот пример был в видео, то было бы проще воспринимать. Особенно новичкам таким как я у которых пока туго с практической фантазией или банально нет опыта. Всетаки когда есть логичное применение, информация лучше запоминается. Чем эти сферические кони в вакууме. Ещё раз, не учу вас, просто выражаю свое мнение субъективное. Спасибо за ваш труд!
Я прохожу курсы по программированию на Python, и даётся мне это тяжеловато, все же гуманитарий. Понять это видео было немного сложно, но я понял. Спасибо, автор. А и нще, ты что, серьезно отвечаешь на все комментарии?
Я самокчка и изучал питон от силы 2 месяца (и больше не питон а api телеграмма) и даже я это знаю. Хз зачем мне было нужно но помню что делал. Через месяц может нарою код и уточню (пк за 70 км на сьёмной квартире. Я студент теперь уже 2 курс)
Ну и костыль ) В других яп есть фигурная скобка которая размечает границы а в питоне можно ошибиться не на роком ) Видимо для таких случаев такой костыль и в добавок нарушает читаемость. Луче его не использовать что бы не запутывать код
С отступами лучше, чем со скобками. Отступы нельзя поместить в одной строке и парные отступы находятся всегда на одном уровне сдвига от начала строки, в отличие от фигурных скобок. Поэтому это кажется, что со скобками вроде как лучше…но это не так )
@@PythonGuru_ Ну если используют отступы как разметку то я не вижу разницы. Оно не луче ни не хуже. Замените отступы на что угодно и работать оно будет также ) То что они не могут быть на одной строке это лиш искусственное ограничение так как отступ тоже является символом как и скобка. Суть то в том что бы видеть границу а не представлять её в голове ) А отступы нужно учиться различать так как это все таки не видимый явно символ
@@PythonGuru_что будет, если форматирование потеряется? Отступ это невидимый элемент и может быть просто потерян. Потом форматирование можно восстановить?
Отступы это зло, это просто лютейшая дичь, особенно если ты пришёл к Python-у после C-подобных языков, где используются скобки, или языков, где блок отделяется отдельными ключевыми словами типа begin...end, как в Pascal, pl/SQL и пр. Первое что страдает - компактность. Теперь ты не можешь простое выражение if a < b then min=a else min = b записать в одну строку, теперь это все барахло на отдельных строках, причём, то что в ветках then и else должно идти: 1) с новой строки; 2) с правильными отступами, на один уровень ниже чем if и else. То есть, выражение выше уже записывается в несколько строк таким образом: if a < b: min = a else: min = b (Кстати, вы же обратили внимание что else находится на одном уровне с if? Здесь также хотелось бы поругаться на Python, но, к сожалению, эта дичь появилась до него, в тех же curvy-braces языках. И эта особенность создаёт проблему соотнесения else с if в случае вложенности выражений - какому if, while, switch соответствует этот else? Ответ - ближайшему, но эта проблема не возникала бы вообще если бы else был вложен в if, как это сделано в том же Pascal, pl/SQL) Вторая проблема с отступами - пустые строки-разделители. Скажем, вы пишете функцию и сразу после сигнатуры функции хотите сделать пустую строку перед телом функции, чтобы визуально их разделить, для пущей удобочитаемости. Так вот, если это будет именно пустая строка, то такой код не выполнит я 😏. Знаете почему? Потому что после сигнатуры с новой строки начинается тело функции, оно должно быть вложено, то есть, иметь, плюс один отступ по отношению к объявлению функции, а, значит, даже ваша пустая строка-разделитель должна иметь правильное (!) число отступов в начале 😁, иначе интерпретатор языка не понимает что это за такую строку он сейчас встретил. В общем, здесь ещё можно много чего писать. И про разное количество пробелов, которым добиваются отступы и на которое потом ругается интерпретатор. и про код, который не помещается на один экран (разработчики языка считают что такой код вообще не должен существовать 😏) и как там понять вложенность хз. И про то что если вам бросили через мессенджер кусок кода на пайтоне а тот (мессенджер) потёр лидирующие пробелы, то это теперь не код, а хлам. Чего никогда не будет с фигурными скобами или begin..end. Что поделать, такое архитектурное решение, создатели языка увидели это так и впоследствии даже сумели убедить в своей точке зрения разработчиков, мол, это не баг а фича, это для того, дорогие разработчики, чтобы научить вас дисциплине.
Кстати, хотелось бы ещё заметить по поводу моего примера с if. Возможно, кто то возразит что это пример совершенно искусственный и здесь даже if использовать не нужно, а нужно использовать т.н. тернарный оператор. Так вот, здесь Python тоже решил переизобрести этот оператор. Если в C-подобных языках этот оператор выглядит следующим образом: var = (condition) ? (expr if true) : (expr if false) То в Python это будет выглядеть так: var = (expr if true) if (condition) else (expr if false) То есть, мой пример с if с использованием тернарного оператора в Python будет выглядеть так: min = a if a < b else b Первое мнение - зачем что то менять, зачем переизобретать велосипед, зачем ломать устоявщиеся в отрасли конструкции и идиомы? Но, создатели языка считают что именно так правильно, более интуитивно, ближе к тому как мы фоомулируем эту ситуацию в естественных языках (те на которых пишем и говорим) 🤷♂️. Хотя, для меня такая конструкция нечитаема, разорваны значения и условие, для читаемости значения должны быть рядом.
на первый взгляд выглядит как что то полезное... но на самом деле я так и не придумал где это использовать, и вообще если подумать это из серии вредные советы, даже вынося использование циклов в коде за скобки
Такое и есть и для цикла фор, но так никогда не стоит делать, это ломает читаемость кода. Таких штук вообще много в питоне, но они далеко не всегда лучше
@@PythonGuru_ читаемость - не только вложенность, это также про понятность кода, многие знают про эту фишку, но я ни разу не встречал ее в продакшн коде, потому что это только путает
не соглашусь. К этому можно и / и * например отнести в аргументах функции. Мало кто знает. Понятность кода также зависит и от знаний человека. А вот удобочитаемость - это удобочитаемость. И конструкция while else наоборот укорачивает код и легко читается.
@@PythonGuru_ не согласен, если арги и кварги очень часто встречаются, есть и рест в жсе, такой же оператор в джава, да во всех языках есть похожий аналог и его в принципе ни чем не заменить, то else после циклов - плохая практика, во-первых, сам автор языка об этом заявлял, а во-вторых, если бы это была такая крутая фишка - она бы хотя бы встречалась, но за 4 года разработки ни разу ее не видел. Хороший код сочетает в себе и оптимизацию, и читабельность, хороший код даже новичок сможет без труда прочесть и понять что же там происходит, очень часто встречал когда читабельность идёт даже в угоду оптимизации, ибо просто легче поддерживать такой код.
если такая плохая фишка, то почему ее до сих пор не убрали? Лично я ее использую, как и многие другие, так де находят это удобным. Вы можете не использовать )
Break завершает цикл и блокирует срабатывание else, но сама программа работает дальше, и, если какую-то фразу вынести за сам цикл, то она всё равно выведется, даже без срабатывания else
А даже когда необходимо то легко можно обойтись и без неё, например, введя булеву переменную-флаг, устанавливая этот флаг в случае досрочного выхода и анализируя значение этой переменной после цикла. Относительно выражения (clause) else в while всегда считал это странной фичей и предполагал что это нужно в случае если тело цикла вообще ни разу не выполнилось, то есть, если на первой же итерации (перед итерацией, точнее) оказывается что условие ложно.
Брейк внутри цикла в моей молодости было дурным тоном, а тут вокруг него такие пляски... Сдаётся мне, технари деградируют, и весь этот питон - подтверждение этой теории.
Можно и без этого просто на вывод последней строки поставить if a == 4, или можно вместо брейка из цикла выходить через goto, да знаю что в уважаемых кругах это зашквар, но почему бы и нет.
Если все цифры были выведены... А что если цифры были выведены, а цикл не был завершен? if a == 3 покажет, что задача сформулирована некорректно. Все цифры будут выведены, но вывода "Цикл завершен полностью" не будет ✌️
В чем проблема в низу цикла поставить принт? Цикл доходит,выходит принтуется надпись и все.А если хочешь что то нахимичить то наоборот грузит сильно компютер
@@Genesis14185 Код под сформулированную задачу написан некорректно. Тут либо код переписывать, либо задачу переформулировать. А можно оставить как есть и болт забить)
Я очень часто в жизни сталкиваюсь с такими моментами, и думаю не один я. Когда ты знаешь, а кто-то нет. И ты думаешь, это же основы, как такое можно не знать…Оказывается можно. И по статистике, будет 90% новичков, 9% мидов и 1% сеньоров. И вот почти все новички, или пропускают это в начале их обучения или им это вообще не преподают.
Я уже был готов к: "БЛЯЯЯЯ, ВРЕМЯ УЧИТЬ ПАЙТОН"
и уже ушло или все ж осталось? )
Вот только хотел написать, ахахсхаха
А где наша любимая фраза?)
А я думал ,что это котлинг.
😂
бимбимбамбам в Пайтоне определённо решает
разве нет?
Охренеть, ни в одном курсе не слышал об этом. Спасибо большое!
👌
Это база. Читайте туториал официальный хотя бы, а не курсы питон за 2 часа!
Что ж это за курсы такие, самой банальщины где не пишут?
На степике в самом популярном курсе это упоминается
Курсы для беспомощных лохов. А ровные программисты читают книги.
Чёт сначала подумала что сейчас прозвучит "БЛЯЯЯЯЯЯТЬ", даже удивилась, но потом обратила внимание на название канала...
переведите, плиз
ПАЙТОН БЛ@ТЬ и БИМБИМБАМБАМ
@@PythonGuru_, не обращайте внимания, в последнее время стал популярным ютубер, который в шортсах объясняет пайтон с матами громким голосом
@@iizqmты не понимаешь просто
@@Logicatube я понимаю, просто объясняю автору, которого эти постоянно донимают в комментариях
Читайте официальную документацию к выбранному языку программирования и не будет никогда пробелов в знаниях.
Автору благодарность за то, что прочитал доку раньше других и оповестил всех.
)
Раньше всех, серьёзно? Это популярная конструкция в питоне
@@SabFo_никому не говорите про try-except-finally)
@@marat_sharafutdinovи про elif
@@marat_sharafutdinovtry except else finally)))
В Python 3.13 разрабы хотят от нее хотят избавиться уже, тк не интуитивная штука (даже если знаешь), в реальных задачах middle/senior такое не используют. Поэтому знайте, если встретится, но сами не используйте)))
жаль, если уберут. А насчет неинтуитивности, никто не мешает написать коммент…
Использую довольно часто. Удобно
@@PythonGuru_ забавно как такие конструкции конвертируются на другие языки при компиляции. Например на тот же js.
@@Maxim9575 Вопрос ковертируются ли. Конверторов много, но ни один не гарантирует 100% поддержки всех конструкций. тут не скажу, не проверял
Интересно, как эта конструкция с else в AST выглядит
... а где тот мужик который начинает каждый урок "бим бим бам бум!!!!"
где-то
у этого мужика канал называется python_is_trash
Побольше бы таких маленьких но содержательных задачек. Спасибо. 👍👍
👍 создаем понемногу
Не надо. Как можно чаще избегайте подобных нюансов и хитростей. Код будет проще и легче поддерживать.
Создать флаг завершения цикла ❌
Быть вторым человеком в мире, который использует конструкцию while else ✅✅✅
ну не прям вторым
@@PythonGuru_, окей, вторым "вторым" - наверняка есть ещё один такой второй
@@PythonGuru_ код надо писать максимально просто, а while else вносит усложнение, поэтому это никому не нужно
Актуально только любителям душить питона, крестовые такое не одобряют.
В чем усложнение? Усложнение для тех, кто впервые видит такую конструкцию?@@VladimirNerby
The most calmest programmist in Russia communit- ☠️ Oh shit wrong channel
for тоже вроде бы поддерживает такую конструкцию. Поколение пайтон точно содержит об этом упоминание. Гвидо говорил про эту конструкцию что не стал бы ее вводить, создавай он язык по новой
так и есть
Все легко и понятно. Спасибо
Это странно... Нет слов. Просто взять. И очевидно известное(в других языках), назвать чудом. Это талант.
Если кто не знал, такая конструкция работает и с циклом for. Если цикл завершится, потому что закончились элементы, то будет выполняться блок кода после else. А если цикл завершится оператором break, то блок кода после else выполняться не будет.
Век живи, век учись! Огромное спасибо!
👌
Очень подробно и очень конкретно, большое спасибо
👌
Это есть не только в while, но и в for ))
да
В исключениях тоже есть
Вот он видос, который мне был нужен в 3 часа ночи 😅
)
Вот это поворот))
Проще было сказать, что while else, аналогия с if else.
А вообще надо людям книги читать, а не курсы проходить.
Раньше прогал, на питоне сейчас на плюсах и капец как стало непривычно видеть код на питоне 😅
Прикольно, Сенсей, спасибо❤
👌
Как можно было это не знать, все так очевидно. Автору спасибо👋
😎
Подожди. А разве после цикла while нельзя просто написать if(a==3):
print("цикл завершён")
По идеи когда а достигнет 3 цикл будет завершён правильно и все напишется.
Изменено: Ахринеть оно поддерживает Else. Не знал. Спасибо за инфу автору.
блин вот оно как! а я думал этот более бесполезный какой-то. а он оказывается не выполняется если досрочно выйти из цикла
👍
Для этих, кто не знал советую пройти курс на степике "поколение python", желательно все 3 части, думаю многие смогут узнать много нового оттуда
любое обучение всегда положительно
@@PythonGuru_ согласен, тем более, что первые 2 части бесплатны, но его особенность - это довольно таки большое количество математики для курса по программированию
математика это важный момент, без нее потом такие алгоритмы у начинающих нарисовываются
Кто-то годами учит программирование а кто-то шортсы смотрит
Я тоже годами, шортсы смотрю
@@iliuhahaha врешь
Узнал недавно пытаясь пересобрать нумерацию в словаре с кастомным интерфейсом tkinter, типа там есть click1 click2 click3, если удаляешь click2 то словарь пересобирается и получается click1 click2, и уже click 2 будет со значением click3, прикол был если удалял click1, то не работало.
Надо же. Я это в книге byte of python вычитал. Не думал, что мало кто об этом знает
А задача реально интересная 🤗
👌
Синтаксический сахарок, как же без него. Без else кста код будет выглядеть так:
a = 0
while a < 4:
print(a)
a += 1
if a == 2:
print("завеошено на 2")
elif a == 4:
print("цикл завершен полность")
Так можно было? Я бы перед break завел булеву переменную, и проверял ее перед print
можно
так впринципе все и делают
Это в нормальных языках так делают. А тут питон, ты ему что-то сказал, он что-то понял, и как-то сделал. Хотя лет 15 назад такая шутка была про пхп.
Это перебор,конечно. Можно просто после цикла проверить, что условие продолжения цикла ложно.
Else уберегает от опечаток.
Я учу C++, но такими темпами с моими реками я выучу и п(р)Итон😂
Я при виде break в цикле 8*(
Меня вот по молодости учили делать без goto
a=0;notStopped=True
while (a
После перехода с Lua на Python мне было сложно разобраться как заканчивать циклы и тому подобное, пытался понять что ставить вместо end в конце, в Lua можно весь код без отступов написать и будет работать
A = 0
while A < 4:
print(a)
A += 1
Print нужно ставить в конце цикла
О, спасибо, буду знать
👌
В других языках можно завести boolean переменную, которая равна true по-умолчанию, а в условии перед break можно присвоить этой переменной false
Если переменная == true, но цикл завершился полностью.
вариант с флагом, а тут можно без этого
Зачем присваивать в условии если можно в while
Конечно я сейчас прохожу C# ,но посмотрев ваши видео мне более менее становится понятно ,что и как делать .
приятно слышать
Интересно смотреть такие задачи. Только меня смущает иногда один ньанс, практическое применение.
Я в целом знаю базу питона и несколько модулей хорошо, ещё несколько среднее, н ци по мелочи. Вообщем чуть выше новичка. Но мне вот например не понятно, какую задачу данная конструкция решает?)
Для меня это выглядит примерно так.
Невероятно!!? все работает так как я и написал, просто глазам не верится)
Правда я знал, что можно использовать else вместе с while)
что нибудь такого рода.
# Программа угадывает число, которое задумал пользователь
secret_number = 42
guess = 0
attempts = 0
max_attempts = 3
while guess != secret_number and attempts < max_attempts:
guess = int(input("Угадайте число: "))
attempts += 1
else:
if guess == secret_number:
print("Поздравляем! Вы угадали число за", attempts, "попыток.")
else:
print("Извините, вы исчерпали все попытки. Задуманное число было", secret_number)
@@PythonGuru_ действительно, все просто. Хороший вы программист, а я видимо неочень пока))
Наверное стоило сильнее свой аналитический аппарат напрячь.
Спасибо!
Не мне вас учить, и наверняка формат шортс слабо подходит, но еслиб этот пример был в видео, то было бы проще воспринимать. Особенно новичкам таким как я у которых пока туго с практической фантазией или банально нет опыта.
Всетаки когда есть логичное применение, информация лучше запоминается. Чем эти сферические кони в вакууме.
Ещё раз, не учу вас, просто выражаю свое мнение субъективное.
Спасибо за ваш труд!
)
Спасибо
👌
Знаю об этом только потому что на собесах спрашивают. В реальности ни разу не видел чтобы использовали...
Кстати в сириус курсах(бесплатные курсы для школьников по разным предметам) в курсе введение в програмирование на python про это рассказывали
это как бы не закрытая информация)
Это надо знать еще в самом начале. Когда больше практикуетесь таких простых вопросов нет даже
да вообще хорошо все знать ) но так не получается…
Я прохожу курсы по программированию на Python, и даётся мне это тяжеловато, все же гуманитарий. Понять это видео было немного сложно, но я понял. Спасибо, автор. А и нще, ты что, серьезно отвечаешь на все комментарии?
стараюсь. но когда очень много, могу пропустить, особенно если они вложенные
Еще и цикл for имеет конструкцию else она срабатывает если цикл прошёл полностью не остановился(например break)
да
вобще можно вместо else
Зделать if n>=4: результат будет таким же но else будет проще написать
чем вычурнее конструкция, тем более вероятно, что вот она нахрен не нужна!
так всегда
так надпись "Цикл завершен полностью" не относилась к циклу, поэтому и вывелась
решение неверное, если в цикле будет continue
Я самокчка и изучал питон от силы 2 месяца (и больше не питон а api телеграмма) и даже я это знаю.
Хз зачем мне было нужно но помню что делал. Через месяц может нарою код и уточню (пк за 70 км на сьёмной квартире. Я студент теперь уже 2 курс)
do while при виде конструкции while-else: Наконец-то достойный противник! Наша битва будет легендарной!
звучит легендарно )
мочи козлов )
немногие знают, но в моей шараге это было, кажется, в первой лекции по Пайтону 🤷
👍
Ну и костыль ) В других яп есть фигурная скобка которая размечает границы а в питоне можно ошибиться не на роком ) Видимо для таких случаев такой костыль и в добавок нарушает читаемость.
Луче его не использовать что бы не запутывать код
С отступами лучше, чем со скобками. Отступы нельзя поместить в одной строке и парные отступы находятся всегда на одном уровне сдвига от начала строки, в отличие от фигурных скобок. Поэтому это кажется, что со скобками вроде как лучше…но это не так )
@@PythonGuru_ Ну если используют отступы как разметку то я не вижу разницы. Оно не луче ни не хуже. Замените отступы на что угодно и работать оно будет также ) То что они не могут быть на одной строке это лиш искусственное ограничение так как отступ тоже является символом как и скобка. Суть то в том что бы видеть границу а не представлять её в голове ) А отступы нужно учиться различать так как это все таки не видимый явно символ
@@PythonGuru_что будет, если форматирование потеряется? Отступ это невидимый элемент и может быть просто потерян. Потом форматирование можно восстановить?
Отступы это зло, это просто лютейшая дичь, особенно если ты пришёл к Python-у после C-подобных языков, где используются скобки, или языков, где блок отделяется отдельными ключевыми словами типа begin...end, как в Pascal, pl/SQL и пр.
Первое что страдает - компактность. Теперь ты не можешь простое выражение
if a < b then min=a else min = b
записать в одну строку, теперь это все барахло на отдельных строках, причём, то что в ветках then и else должно идти: 1) с новой строки; 2) с правильными отступами, на один уровень ниже чем if и else.
То есть, выражение выше уже записывается в несколько строк таким образом:
if a < b:
min = a
else:
min = b
(Кстати, вы же обратили внимание что else находится на одном уровне с if? Здесь также хотелось бы поругаться на Python, но, к сожалению, эта дичь появилась до него, в тех же curvy-braces языках. И эта особенность создаёт проблему соотнесения else с if в случае вложенности выражений - какому if, while, switch соответствует этот else? Ответ - ближайшему, но эта проблема не возникала бы вообще если бы else был вложен в if, как это сделано в том же Pascal, pl/SQL)
Вторая проблема с отступами - пустые строки-разделители. Скажем, вы пишете функцию и сразу после сигнатуры функции хотите сделать пустую строку перед телом функции, чтобы визуально их разделить, для пущей удобочитаемости. Так вот, если это будет именно пустая строка, то такой код не выполнит я 😏. Знаете почему? Потому что после сигнатуры с новой строки начинается тело функции, оно должно быть вложено, то есть, иметь, плюс один отступ по отношению к объявлению функции, а, значит, даже ваша пустая строка-разделитель должна иметь правильное (!) число отступов в начале 😁, иначе интерпретатор языка не понимает что это за такую строку он сейчас встретил.
В общем, здесь ещё можно много чего писать. И про разное количество пробелов, которым добиваются отступы и на которое потом ругается интерпретатор. и про код, который не помещается на один экран (разработчики языка считают что такой код вообще не должен существовать 😏) и как там понять вложенность хз. И про то что если вам бросили через мессенджер кусок кода на пайтоне а тот (мессенджер) потёр лидирующие пробелы, то это теперь не код, а хлам. Чего никогда не будет с фигурными скобами или begin..end.
Что поделать, такое архитектурное решение, создатели языка увидели это так и впоследствии даже сумели убедить в своей точке зрения разработчиков, мол, это не баг а фича, это для того, дорогие разработчики, чтобы научить вас дисциплине.
Кстати, хотелось бы ещё заметить по поводу моего примера с if. Возможно, кто то возразит что это пример совершенно искусственный и здесь даже if использовать не нужно, а нужно использовать т.н. тернарный оператор. Так вот, здесь Python тоже решил переизобрести этот оператор.
Если в C-подобных языках этот оператор выглядит следующим образом:
var = (condition) ? (expr if true) : (expr if false)
То в Python это будет выглядеть так:
var = (expr if true) if (condition) else (expr if false)
То есть, мой пример с if с использованием тернарного оператора в Python будет выглядеть так:
min = a if a < b else b
Первое мнение - зачем что то менять, зачем переизобретать велосипед, зачем ломать устоявщиеся в отрасли конструкции и идиомы? Но, создатели языка считают что именно так правильно, более интуитивно, ближе к тому как мы фоомулируем эту ситуацию в естественных языках (те на которых пишем и говорим) 🤷♂️. Хотя, для меня такая конструкция нечитаема, разорваны значения и условие, для читаемости значения должны быть рядом.
Сам автор питона говорил, что если бы создавал язык заново, то не добавлял бы этого
на первый взгляд выглядит как что то полезное... но на самом деле я так и не придумал где это использовать, и вообще если подумать это из серии вредные советы, даже вынося использование циклов в коде за скобки
тут уж вам решать, я не советую использовать, я говорю, что многие об этом не знают
Я знал про for else , но теперь знаю что с while тоже так можно :) 😊
в пайтоне все циклы поддерживают структуру с for
@@PythonGuru_ может вы имели ввиду с else?
ой, да ) с else )
Хехе, а я пока смотрел подумал что можно использовать try и finally, а оказывается все так
вот так
Интересно, но бесполезно 😊 лучше не допускать ветвлений в цикле для хорошей читаемости кода
это не относится к ветвлению. Ветвление, когда мы вкладываем дополнительные условия внутрь существующих условий
@@PythonGuru_ да он прав, когда питон используешь не как основной, такие фокусы вымораживат немного
@@PythonGuru_это ветвление
Ох уж этот Удав, мало того, что пробелы вместо скобок, так ещё и else к while зачем-то присрали
"в случае если все цифры были выведены" - неверное решение данного условия
if a!=2: print(a)
в итоге будут "выведены" все числа кроме 2
там нет a!=2. Там есть, если a==2
Такое и есть и для цикла фор, но так никогда не стоит делать, это ломает читаемость кода. Таких штук вообще много в питоне, но они далеко не всегда лучше
Чем они ломают? Это не вложенные условия, это конструкция первого уровня.
@@PythonGuru_ читаемость - не только вложенность, это также про понятность кода, многие знают про эту фишку, но я ни разу не встречал ее в продакшн коде, потому что это только путает
не соглашусь. К этому можно и / и * например отнести в аргументах функции. Мало кто знает.
Понятность кода также зависит и от знаний человека. А вот удобочитаемость - это удобочитаемость. И конструкция while else наоборот укорачивает код и легко читается.
@@PythonGuru_ не согласен, если арги и кварги очень часто встречаются, есть и рест в жсе, такой же оператор в джава, да во всех языках есть похожий аналог и его в принципе ни чем не заменить, то else после циклов - плохая практика, во-первых, сам автор языка об этом заявлял, а во-вторых, если бы это была такая крутая фишка - она бы хотя бы встречалась, но за 4 года разработки ни разу ее не видел. Хороший код сочетает в себе и оптимизацию, и читабельность, хороший код даже новичок сможет без труда прочесть и понять что же там происходит, очень часто встречал когда читабельность идёт даже в угоду оптимизации, ибо просто легче поддерживать такой код.
если такая плохая фишка, то почему ее до сих пор не убрали?
Лично я ее использую, как и многие другие, так де находят это удобным. Вы можете не использовать )
Хочу уйти в програмирование,вылез этот ролик....смотрю и понимаю как же я далек пока от этого....как будто с другой планеты 😊
годно
👍
Я теперь понял как работает цикл white
отлично
Break завершает цикл и блокирует срабатывание else, но сама программа работает дальше, и, если какую-то фразу вынести за сам цикл, то она всё равно выведется, даже без срабатывания else
Всё понятно,меня java послала куда подальше и дала знать что мне надо подумать 😅
эта фича только в пайтоне
Тут и скобок нет как в Java, в Java проще создать boolean флаг, который будет проверять условие true/false
Ну как бы я знаю что else работает в цикле while. Он и в цикле for работает и в обработке исключения и в том числе с условной конструкции match.
так и есть
Очень полезная конструкция, жаль очень редко необходима.
есть такле
А даже когда необходимо то легко можно обойтись и без неё, например, введя булеву переменную-флаг, устанавливая этот флаг в случае досрочного выхода и анализируя значение этой переменной после цикла.
Относительно выражения (clause) else в while всегда считал это странной фичей и предполагал что это нужно в случае если тело цикла вообще ни разу не выполнилось, то есть, если на первой же итерации (перед итерацией, точнее) оказывается что условие ложно.
@@user-km5nv6ww2e так это синтаксический сахар, полезно для быстроты разработки и понимания
Знание полезно но можно просто поставить условие в цикле что если a
можно
А если цикл сложнее, чем просто а+1? А если переменная задаётся пользователем? Это же просто пример.
@@wylarshпеременную так же в if добавляешь
По моему просто блок кода print нужно поместить в while табуляцией.
поместить можно, но там это для пояснения процесса. Поэтому сдвинув, уже будет не о том
не вложенная в цикл функция отрабатывает после его завершения вне зависимости от условия цикла. прямо таки магия
👀
Ну
Об этом рассказывалось на курсе для начинающих на степике (от поколение Пайтон). Сейчас как раз заканчиваю этот курс )))
👍
Никогда не слышал об этом. Спасибо автору за годный контент
😎💪
Как же все через самое неудобное место сделано.
Брейк внутри цикла в моей молодости было дурным тоном, а тут вокруг него такие пляски...
Сдаётся мне, технари деградируют, и весь этот питон - подтверждение этой теории.
Так погнав я провіряти на c++
Можно и без этого просто на вывод последней строки поставить if a == 4, или можно вместо брейка из цикла выходить через goto, да знаю что в уважаемых кругах это зашквар, но почему бы и нет.
👀
For тоже этотподдерживает
да
конечно всё круто,но я просто добавлю ещё одну переменную как счётчик
хозяин барин ) Тоже правильный вариант
Только сегодня проходил это на степике
👍
можно было просто проверять, что a == n-1 (n в данном случае 4)
там суть в другом, в ролике
И вправду работает
Интуитивнее if a >= 4: print('конец') , потом вспоминай зачем этот else был . Особенно когда его выпилят из очередной новой версии
Вообще, я по моему знал что он поддерживает else но не думал что он так приминяется, буду знать
👌
Не работаю с Пайтон, но возможность интересная 👍
Если все цифры были выведены... А что если цифры были выведены, а цикл не был завершен? if a == 3 покажет, что задача сформулирована некорректно. Все цифры будут выведены, но вывода "Цикл завершен полностью" не будет ✌️
В чем проблема в низу цикла поставить принт?
Цикл доходит,выходит принтуется надпись и все.А если хочешь что то нахимичить то наоборот грузит сильно компютер
@@Genesis14185 Код под сформулированную задачу написан некорректно. Тут либо код переписывать, либо задачу переформулировать. А можно оставить как есть и болт забить)
break в циклах работает по-другому нежели в switch.
Так же можно поставить return
return у нас только для функций
А как тоже самое сделать с конструкцией
(i=0; i>4; i++1)?
в js через доп проверку, через счетчик
Можно вместо break поставить continue
закрепленный коммент
Я не могу понять разницу между break и continue.
Вообще любой цикл имеет else во всех современных языках
Аааа понял
Я поначалу : о чём речь
Пересмотрел 4 раза чтобы понять😮
Должно быть, конечно, не else, а finally, иначе мозгом не воспринимается. А так - круто.
В соседнем видео был дед-сенсей, с какой то Чун-Дре-Хер видом спорта... Так вот, он тоже думает, что его приемы не знают 90 % спортсменов
Я очень часто в жизни сталкиваюсь с такими моментами, и думаю не один я. Когда ты знаешь, а кто-то нет. И ты думаешь, это же основы, как такое можно не знать…Оказывается можно. И по статистике, будет 90% новичков, 9% мидов и 1% сеньоров. И вот почти все новички, или пропускают это в начале их обучения или им это вообще не преподают.
Классная конструкция в языке xD. Обходите её за километр!
👀
Это что за редактор такой классный? Как называется?
Visual studio code от Microsoft, совершенно бесплатно. Не путать с Visual Studio
@@PythonGuru_ благодарю
Скажите, это все популярные языки поддерживают?
практически ни один, кроме пайтона
В питоне тоже скоро удалят
@@PythonGuru_Во многих си-подобных языках.
@@vas_._sfer6157удалят, чтобы что?
А нельзя поменять "while" на "for"
И начать с 1?
Я знаю об этом. Также это работает с оператором for
точнее сказать, со всеми циклами
В цикле for работает аналогично
Правда, такая конструкция обычно не используется, и может вызвать путаницу из-за этого
когда знаешь, там пусть уже сами программисты решают, использовать или нет )