Введите с клавиатуры количество повторений и отобразите столько же раз какое-то сообщение
Обновлено: 21.11.2024
Значение — это одна из фундаментальных вещей, таких как буква или число, которыми манипулирует программа. До сих пор мы видели значения 2 (результат, когда мы добавили 1 + 1 ) и "Hello, World!" .< /p>
Эти значения относятся к разным типам данных: 2 – это целое число, а "Hello, World!" – это строка. , так называемый, потому что он содержит строку букв. Вы (и интерпретатор) можете идентифицировать строки, поскольку они заключены в кавычки.
Операция print также работает для целых чисел.
Если вы не уверены, какой тип имеет значение, интерпретатор может сообщить вам об этом.
Неудивительно, что строки относятся к типу str, а целые числа — к типу int. Менее очевидно, что числа с десятичной точкой принадлежат к типу с плавающей запятой, потому что эти числа представлены в формате с плавающей запятой.
Как насчет таких значений, как "17" и "3,2"? Они выглядят как числа, но заключены в кавычки, как строки.
Строки в Python могут быть заключены в одинарные (‘) или двойные кавычки (”):
Строки в двойных кавычках могут содержать внутри одинарные кавычки, как в "Bruce's beard" , а строки в одинарных кавычках могут заключаться в двойные кавычки, как в 'Рыцари, которые говорят "Ni !"' .
Когда вы вводите большое целое число, у вас может возникнуть соблазн использовать запятые между группами из трех цифр, например 1 000 000. Это недопустимое целое число в Python, но допустимо:
Ну, это совсем не то, чего мы ожидали! Python интерпретирует 1 000 000 как список из трех элементов, которые нужно распечатать. Так что не ставьте запятые в ваших целых числах.
2.2. Переменные¶
Одной из самых мощных функций языка программирования является возможность манипулировать переменными. Переменная — это имя, которое ссылается на значение.
Оператор присваивания создает новые переменные и присваивает им значения:
В этом примере выполняются три назначения. Первый присваивает строку "What's up, Doc?" новой переменной с именем message. Второй дает целое число 17 в n , а третий дает число с плавающей запятой 3.14159 в pi .
Оператор присваивания = не следует путать со знаком равенства (даже если он использует тот же символ). Операторы присваивания связывают имя слева от оператора с значением справа. Вот почему вы получите сообщение об ошибке, если введете:
Распространенный способ представления переменных на бумаге – написать имя со стрелкой, указывающей на значение переменной. Такой рисунок называется диаграммой состояний, потому что он показывает, в каком состоянии находится каждая из переменных (думайте об этом как о состоянии ума переменной). На этой диаграмме показан результат операторов присваивания:
Операция print также работает с переменными.
В каждом случае результатом является значение переменной. Переменные также имеют типы; опять же, мы можем спросить у переводчика, что это такое.
Тип переменной – это тип значения, на которое она ссылается.
2.3. Имена переменных и ключевые слова¶
Программисты обычно выбирают для своих переменных осмысленные имена — они документируют, для чего используется переменная.
Имена переменных могут быть произвольно длинными. Они могут содержать как буквы, так и цифры, но начинаться они должны с буквы. Хотя разрешено использовать заглавные буквы, по соглашению мы этого не делаем. Если вы это сделаете, помните, что дело имеет значение. Брюс и брюс — разные переменные.
В имени может присутствовать символ подчеркивания ( _ ). Он часто используется в именах, состоящих из нескольких слов, таких как my_name или price_of_tea_in_china .
Если вы дадите переменной недопустимое имя, вы получите синтаксическую ошибку:
76trombones является недопустимым, поскольку не начинается с буквы. more$ является недопустимым, поскольку содержит недопустимый символ, знак доллара. Но что не так с class?
Оказалось, что class — это одно из ключевых слов Python. Ключевые слова определяют правила и структуру языка, и их нельзя использовать в качестве имен переменных.
В Python тридцать одно ключевое слово:
и | as | assert | break | класс | продолжить |
def | del | elif | else | кроме | exec |
наконец | для | из | глобальный | если | импорт |
в | есть< /td> | лямбда | не | или | пройти |
печатать | поднять | вернуть | попробовать | пока | с |
выход |
Возможно, вы захотите держать этот список под рукой. Если интерпретатор жалуется на одно из ваших имен переменных, и вы не знаете, почему, посмотрите, есть ли оно в этом списке.
2.4. Операторы¶
Инструкция — это инструкция, которую может выполнить интерпретатор Python. Мы видели два вида операторов: печать и присваивание.
Когда вы вводите оператор в командной строке, Python выполняет его и отображает результат, если он есть. Результатом оператора печати является значение. Операторы присваивания не дают результата.
Сценарий обычно содержит последовательность операторов. Если имеется более одного оператора, результаты отображаются по одному по мере выполнения операторов.
Например, скрипт
выдает результат:
Опять же, оператор присваивания не производит никакого вывода.
2.5. Вычисление выражений¶
Выражение представляет собой комбинацию значений, переменных и операторов. Если вы вводите выражение в командной строке, интерпретатор оценивает его и отображает результат:
В результате вычисления выражения получается значение, поэтому выражения могут появляться справа от операторов присваивания. Значение само по себе является простым выражением, как и переменная.
Как ни странно, вычисление выражения — это не совсем то же самое, что печать значения.
Когда оболочка Python отображает значение выражения, она использует тот же формат, который вы использовали бы для ввода значения. В случае строк это означает, что они включают кавычки. Но оператор печати печатает значение выражения, которое в данном случае является содержимым строки.
В скрипте выражение само по себе является допустимым утверждением, но оно ничего не делает. Скрипт
вообще ничего не выводит. Как бы вы изменили сценарий для отображения значений этих четырех выражений?
2.6. Операторы и операнды¶
Операторы — это специальные символы, которые представляют такие вычисления, как сложение и умножение. Значения, которые использует оператор, называются операндами.
Ниже приведены все допустимые выражения Python, смысл которых более или менее ясен:
Символы + , - и / , а также использование скобок для группировки означают в Python то же, что и в математике. Звездочка ( * ) — это символ умножения, а ** — символ возведения в степень.
Когда вместо операнда появляется имя переменной, перед выполнением операции оно заменяется его значением.
Сложение, вычитание, умножение и возведение в степень делают то, что вы ожидаете, но деление может вас удивить. Следующая операция имеет неожиданный результат:
Значение minute равно 59, а 59, деленное на 60, равно 0,98333, а не 0. Причина расхождения в том, что Python выполняет целочисленное деление.
Когда оба операнда являются целыми числами, результат также должен быть целым числом, и по соглашению целочисленное деление всегда округляется в меньшую сторону, даже в подобных случаях, когда следующее целое число очень близко.< /p>
Возможным решением этой проблемы является вычисление процента, а не дроби:
Опять результат округляется в меньшую сторону, но, по крайней мере, теперь ответ примерно правильный. Другой альтернативой является использование деления с плавающей запятой. В главе 4 мы увидим, как преобразовывать целые значения и переменные в значения с плавающей запятой.
2.7. Порядок операций¶
Когда в выражении появляется более одного оператора, порядок их вычисления зависит от правил приоритета. Python следует тем же правилам приоритета для своих математических операторов, что и математика. Аббревиатура PEMDAS помогает запомнить порядок операций:
- Скобки имеют наивысший приоритет и могут использоваться для принудительного вычисления выражения в нужном вам порядке. Поскольку выражения в круглых скобках оцениваются первыми, 2 * (3-1) равно 4, а (1+1)**(5-2) равно 8. Вы можете также используйте круглые скобки, чтобы упростить чтение выражения, например (minute * 100) / 60 , даже если это не меняет результат.
- Возведение в степень имеет следующий наивысший приоритет, поэтому 2**1+1 равно 3, а не 4, а 3*1**3 равно 3, а не 27.
- Умножение и деление имеют одинаковый приоритет, который выше, чем сложение и вычитание, которые также имеют такой же приоритет. Таким образом, 2*3-1 дает 5, а не 4, а 2/3-1 равно -1, а не 1 (помните, что при целочисленном делении 2/3=0 ).
- Операторы с одинаковым приоритетом оцениваются слева направо. Таким образом, в выражении minute*100/60 сначала происходит умножение, что дает 5900/60, что, в свою очередь, дает 98. Если бы операции выполнялись справа налево, результат был бы < tt>59*1 , что равно 59, что неверно.
2.8. Операции со строками¶
Как правило, вы не можете выполнять математические операции со строками, даже если строки выглядят как числа. Следующее является недопустимым (при условии, что message имеет тип string):
Интересно, что оператор + работает со строками, хотя и не совсем так, как можно было бы ожидать. Для строк оператор + представляет конкатенацию, что означает соединение двух операндов путем их прямой связи. Например:
Выход этой программы - бананово-ореховый хлеб . Пробел перед словом nut является частью строки и необходим для создания пробела между объединенными строками.
Операция * также работает со строками; он выполняет повторение. Например, 'Fun'*3 равно 'FunFunFun' . Один из операндов должен быть строкой; другое должно быть целым числом.
С одной стороны, такая интерпретация + и * имеет смысл по аналогии со сложением и умножением. Поскольку 4*3 эквивалентно 4+4+4 , мы ожидаем, что "Fun"*3 будет таким же, как "Весело"+"Весело"+"Весело" , и это так. С другой стороны, конкатенация и повторение строк существенно отличаются от сложения и умножения целых чисел. Можете ли вы придумать свойство, которым обладают сложение и умножение и которых нет у конкатенации строк и повторения?
2.9. Ввод¶
В Python есть две встроенные функции для ввода с клавиатуры:
Пример запуска этого скрипта будет выглядеть примерно так:
Каждая из этих функций позволяет передать подсказку функции, заключенной в круглые скобки.
2.10. Композиция¶
До сих пор мы рассматривали элементы программы — переменные, выражения и операторы — по отдельности, не говоря о том, как их комбинировать.
Одной из самых полезных функций языков программирования является их способность брать небольшие стандартные блоки и составлять их. Например, мы умеем складывать числа и умеем печатать; оказывается, мы можем делать и то, и другое одновременно:
На самом деле добавление должно произойти до печати, поэтому действия на самом деле не происходят одновременно. Дело в том, что любое выражение, включающее числа, строки и переменные, может использоваться внутри оператора печати. Вы уже видели пример этого:
Вы также можете помещать произвольные выражения в правую часть оператора присваивания:
Сейчас эта возможность может показаться не впечатляющей, но вы увидите другие примеры, когда композиция позволяет аккуратно и лаконично выражать сложные вычисления.
Предупреждение. Существуют ограничения на использование определенных выражений. Например, в левой части оператора присваивания должно быть имя переменной, а не выражение. Таким образом, следующее недопустимо: минута+1 = час .
2.11. Комментарии¶
По мере того, как программы становятся больше и сложнее, их становится все труднее читать. Формальные языки сложны, и часто бывает трудно взглянуть на фрагмент кода и понять, что он делает и почему.
В этом случае комментарий появляется на отдельной строке. Вы также можете поместить комментарии в конце строки:
2.12. Глоссарий¶
оператор присваивания = — это оператор присваивания Python, который не следует путать с математическим оператором сравнения, использующим тот же символ. оператор присваивания
Инструкция, которая присваивает значение имени (переменной). Слева от оператора присваивания = находится имя. Справа от оператора присваивания находится выражение, которое вычисляется интерпретатором Python и затем присваивается имени. Разница между левой и правой частями оператора присваивания часто сбивает с толку начинающих программистов. В следующем задании:
n играет совершенно разные роли по обе стороны от = . Справа это значение, составляющее часть выражения, которое будет оцениваться интерпретатором Python перед тем, как присвоить его имени слева.
комментарий Информация в программе, предназначенная для других программистов (или тех, кто читает исходный код) и не влияющая на выполнение программы.композиция Способность объединять простые выражения и операторы в составные операторы и выражения для краткого представления сложных вычислений. concatenate Чтобы соединить две строки встык. тип данных Набор значений. Тип значения определяет, как его можно использовать в выражениях. До сих пор вы видели целые числа (тип int), числа с плавающей запятой (тип float) и строки (тип str). ). оценить Чтобы упростить выражение, выполняя операции для получения единственного значения. выражение Комбинация переменных, операторов и значений, представляющая одно значение результата. float Тип данных Python, в котором хранятся числа с плавающей запятой. Числа с плавающей запятой хранятся внутри в двух частях: база и экспонента. При печати в стандартном формате они выглядят как десятичные числа. Остерегайтесь ошибок округления при использовании float и помните, что это только приблизительные значения. int Тип данных Python, который содержит положительные и отрицательные целые числа. целочисленное деление Операция деления одного целого числа на другое с получением целого числа. Целочисленное деление дает только целое число раз, когда числитель делится на знаменатель, и отбрасывает любой остаток. ключевое слово Зарезервированное слово, используемое компилятором для разбора программы; вы не можете использовать такие ключевые слова, как if , def и while в качестве имен переменных. операнд Одно из значений, над которым работает оператор. оператор Специальный символ, представляющий простое вычисление, такое как сложение, умножение или конкатенация строк. правила приоритета Набор правил, определяющих порядок, в котором оцениваются выражения, включающие несколько операторов и операндов. диаграмма состояний Графическое представление набора переменных и значений, к которым они относятся. оператор Инструкция, которую может выполнить интерпретатор Python. Примеры операторов включают оператор присваивания и оператор печати. str Тип данных Python, содержащий строку символов. значение Число или строка (или другие элементы, которые будут названы позже), которые можно сохранить в переменной или вычислить в выражении. переменная Имя, которое ссылается на значение. имя переменной Имя, присвоенное переменной. Имена переменных в Python состоят из последовательности букв (a..z, A..Z и _) и цифр (0..9), которая начинается с буквы. В соответствии с передовой практикой программирования имена переменных следует выбирать так, чтобы они описывали их использование в программе, делая программу самодокументируемой.
Мы советуем нашим клиентам повторять, повторять, повторять: получить хорошее сообщение и придерживаться его — в печатной, цифровой и устной коммуникации.
На самом деле мы часто говорим, что кому-то нужно услышать сообщение 14 раз, прежде чем он начнет действовать на основе этого сообщения.
Недавно я искал первоисточник этого факта. Сначала мы слышали «правило 14 раз» как рекламную поговорку и задавались вопросом, изменилось ли преобладающее мнение, особенно в эпоху социальных сетей.
Эффективная частота — это количество раз, которое человек должен услышать сообщение, прежде чем действовать в соответствии с ним. Итак, какова эффективная частота сообщений вашей организации?
Несмотря на то, что существует много противоречивой информации, все согласны в одном: повторять свое сообщение — это хорошо.
Я нашел это в блоге, который American Express публикует для своих бизнес-клиентов:
Итак, насколько частыми должны быть ваши сообщения, чтобы охватить и активировать вашу аудиторию? Давние исследования в области рекламы говорят нам, что требуется от трех до семи показов, прежде чем сообщение будет зафиксировано. Частота менее трех сообщений — пустая трата денег. Но частота выше семи продолжает иметь кумулятивный эффект; убывающая отдача не наступает в течение длительного времени. Вы устанете от рекламы задолго до того, как это сделает ваш потенциальный клиент.
Мы согласны. Это то, что мы говорим нашим некоммерческим клиентам, которые беспокоятся, что их сообщение устаревает, или что донору, который слышит одно и то же сообщение от всех, с кем он разговаривает, в лучшем случае будет скучно и, самое большее, подозрительно. Не путайте свою скуку с ее: она не уделяет вашему общению столько внимания, сколько вам хотелось бы.
В блоге The Financial Brand мы нашли следующее:
Эксперты по маркетингу любят спорить о "правильных способах" расчета эффективной частоты показов. Некоторые говорят, что повторение сообщения три раза будет работать, в то время как многие считают, что применяется «Правило 7». Microsoft провела исследование, в котором изучалось оптимальное количество экспозиций, необходимых для аудиосообщений. Они пришли к выводу, что от 6 до 20 – лучший вариант.
В моем чтении это часто цитировалось:
В первый раз, когда люди смотрят рекламу, они ее не видят.
Второй раз не замечают.
На 3-й раз они осознают, что он там.
На четвертый раз у них возникает мимолетное ощущение, что они уже видели это раньше.
На 5-й раз рекламу действительно читают.
На шестой раз они ткнули носом в это.
На седьмой раз это их немного раздражает.
На восьмой раз они думают: «Опять эта дурацкая реклама».
В девятый раз они задаются вопросом, не упускают ли они что-то.
В 10-й раз они спрашивают своих друзей или соседей, пробовали ли они это.
В 11-й раз удивляются, как компания платит за всю эту рекламу.
На 12-й раз они начинают думать, что это должен быть хороший продукт.
На 13-й раз они начинают чувствовать, что продукт имеет ценность.
На 14-й раз им начинает казаться, что они давно хотели такой продукт.
На 15-й раз они начинают тосковать по нему, потому что не могут позволить себе его купить.
В 16-й раз они соглашаются с тем, что когда-нибудь купят его в будущем.
В 17-й раз они берут на себя обязательство купить продукт.
В 18-й раз они проклинают свою бедность, потому что не могут купить этот потрясающий продукт.
В 19-й раз они очень тщательно считают свои деньги.
После 20-го раза, когда потенциальные клиенты видят рекламу, они покупают то, что она предлагает.
Это еще более интересно, если учесть, что она была написана в 1885 году. Если вдуматься, люди не сильно изменились. Но объем поступающей к нам информации имеет значение.
В одном из найденных нами аннотаций о частоте сообщений говорится следующее:
Исследования показывают, что повторяющиеся утверждения воспринимаются как более правдивые, чем утверждения, сделанные реже, «предположительно потому, что повторение делает утверждение знакомым». Проще говоря: частота порождает знакомство, а знакомство порождает доверие.
Точно так же исследования показывают, что повторное ознакомление с мнением заставляет людей поверить в то, что это мнение более распространено, даже если источником этого мнения является всего один человек.
Поэтому потребители не только запоминают повторяющееся утверждение, но и с большей вероятностью ему верят и думают, что это общепринятое мнение.
Подводя итог, мы не смогли найти исследование, в котором недвусмысленно утверждалось бы «правило 14 раз», но общий вывод заключается в том, что необходима частота от 7 до 20. И поскольку нет более точных эмпирических данных, чем «правило 14 раз», мы придерживаемся его.
Если вы некоммерческая организация, независимо от того, насколько велик или мал ваш бюджет, самым мощным инструментом в вашем распоряжении является дисциплинированное повторение убедительного набора ключевых сообщений. Эти сообщения должны быть использованы всеми, кто говорит и пишет о вашей организации и ее работе. То, чего вам не хватает в возможности таргетировать свою аудиторию с помощью платной рекламы, вы можете компенсировать постоянным повторением в своих повседневных сообщениях с течением времени.
Мы хотим знать, что вы думаете. Какую эффективную частоту вы использовали для своих сообщений?
*Примечание редактора. Это сообщение было первоначально опубликовано в марте 2015 года и обновлено для обеспечения точности и полноты.
Добро пожаловать! Если вы хотите научиться работать с циклами while в Python, эта статья для вас.
Хотя циклы — это очень мощные программные структуры, которые вы можете использовать в своих программах для повторения последовательности операторов.
Из этой статьи вы узнаете:
- Что такое циклы while.
- Для чего они используются.
- Когда их следует использовать.
- Как они работают за кулисами.
- Как написать цикл while в Python.
- Что такое бесконечные циклы и как их прервать.
- Для чего используется while True и его общий синтаксис.
- Как использовать оператор break для остановки цикла while.
Вы узнаете, как циклы while работают за кулисами, с помощью примеров, таблиц и диаграмм.
Вы готовы? Давай начнем. 🔅
🔹 Назначение и варианты использования циклов While
Начнем с назначения циклов while. Для чего они используются?
Они используются для повторения последовательности операторов неизвестное количество раз. Этот тип цикла выполняется, пока заданное условие истинно, и останавливается только тогда, когда условие становится ложным.
Когда мы пишем цикл while, мы не определяем явно, сколько итераций будет выполнено, мы только пишем условие, которое должно быть True, чтобы процесс продолжался, и False, чтобы остановить его.
💡 Совет: если условие цикла while никогда не оценивается как False , то у нас будет бесконечный цикл, который никогда не останавливается (теоретически) без внешнего вмешательства.
Вот несколько примеров реального использования циклов while:
- Ввод данных пользователем. Когда мы запрашиваем ввод данных пользователем, нам необходимо проверить, является ли введенное значение допустимым. Мы не можем знать заранее, сколько раз пользователь введет неверный ввод, прежде чем программа сможет продолжить работу. Поэтому цикл while идеально подходит для этого сценария.
- Поиск: поиск элемента в структуре данных — еще один идеальный вариант использования цикла while, поскольку мы не можем заранее знать, сколько итераций потребуется для нахождения целевого значения. Например, алгоритм бинарного поиска можно реализовать с помощью цикла while.
- Игры. В игре можно использовать цикл while, чтобы поддерживать работу основной логики игры до тех пор, пока игрок не проиграет или игра не закончится. Мы не можем знать заранее, когда это произойдет, так что это еще один идеальный сценарий для цикла while.
🔸 Как работают циклы While
Теперь, когда вы знаете, для чего используются циклы while, давайте посмотрим на их основную логику и то, как они работают за кулисами. Вот у нас есть диаграмма:
Пока цикл
Давайте разберем это подробнее:
- Процесс начинается, когда во время выполнения программы обнаруживается цикл while.
- Условие оценивается, чтобы проверить, является ли оно истинным или ложным.
- Если условие равно True , выполняются операторы, принадлежащие циклу.
- Условие цикла while проверяется снова.
- Если условие снова оценивается как True, последовательность операторов выполняется снова, и процесс повторяется.
- Когда условие оценивается как False , цикл останавливается, и программа продолжает работу за пределами цикла.
Одной из наиболее важных характеристик циклов while является то, что переменные, используемые в условии цикла, не обновляются автоматически. Мы должны явно обновить их значения с помощью нашего кода, чтобы убедиться, что цикл в конечном итоге остановится, когда условие оценивается как False .
🔹 Общий синтаксис циклов While
Отлично. Теперь вы знаете, как работают циклы while, поэтому давайте углубимся в код и посмотрим, как написать цикл while на Python. Это основной синтаксис:
Цикл while (синтаксис)
Это основные элементы (по порядку):
- Ключевое слово while (за которым следует пробел).
- Условие, определяющее, будет ли цикл продолжать работу или нет, на основе его истинного значения ( True или False ).
- Двоеточие ( : ) в конце первой строки.
- Последовательность операторов, которые будут повторяться. Этот блок кода называется «телом» цикла, и он должен иметь отступ. Если оператор не имеет отступа, он не будет считаться частью цикла (см. диаграмму ниже).
💡 Совет. Руководство по стилю Python (PEP 8) рекомендует использовать 4 пробела на уровень отступа. Табуляции следует использовать только для того, чтобы оставаться согласованным с кодом, который уже имеет отступы с табуляциями.
🔸 Примеры циклов While
Теперь, когда вы знаете, как работают циклы while и как их писать на Python, давайте посмотрим, как они работают за кулисами, на нескольких примерах.
Как работает базовый цикл while
Здесь у нас есть базовый цикл while, который выводит значение i, пока i меньше 8 ( i ):
Если мы запустим код, мы увидим следующий вывод:
Давайте посмотрим, что происходит за кулисами при запуске кода:
- Итерация 1: изначально значение i равно 4, поэтому условие i оценивается как True, и цикл начинает выполняться. Выводится значение i (4), и это значение увеличивается на 1. Цикл начинается снова.
- Итерация 2: теперь значение i равно 5, поэтому условие i оценивается как True . Выполняется тело цикла, выводится значение i (5), и это значение i увеличивается на 1. Цикл начинается снова.
- Итерации 3 и 4. Тот же процесс повторяется для третьей и четвертой итераций, поэтому печатаются целые числа 6 и 7.
- Перед началом пятой итерации значение i равно 8 . Теперь условие цикла while оценивается как False, и цикл немедленно останавливается.
💡 Совет. Если условие цикла while имеет значение False перед началом первой итерации, цикл while даже не запустится.
Ввод данных пользователем с использованием цикла while
Теперь давайте рассмотрим пример цикла while в программе, которая принимает вводимые пользователем данные. Мы будем использовать функцию input(), чтобы попросить пользователя ввести целое число, и это целое число будет добавлено к списку только в том случае, если оно четное.
Это код:
Условием цикла является len(nums) , поэтому цикл будет выполняться, пока длина списка nums строго меньше 4.
Давайте проанализируем эту программу построчно:
- Начнем с определения пустого списка и присвоения его переменной с именем nums .
- Затем мы определяем цикл while, который будет выполняться, пока len(nums) .
- Мы запрашиваем пользовательский ввод с помощью функции input() и сохраняем его в переменной user_input.
💡 Совет. Нам нужно преобразовать (преобразовать) значение, введенное пользователем, в целое число с помощью функции int(), прежде чем присваивать его переменной, поскольку функция input() возвращает строку (источник).
- Мы проверяем, является ли это значение четным или нечетным.
- Если число четное, мы добавляем его в список номеров.
- В противном случае, если оно нечетное, цикл запускается снова, и условие проверяется, чтобы определить, должен ли цикл продолжаться или нет.
Если мы запустим этот код с пользовательским вводом, мы получим следующий результат:
В этой таблице показано, что происходит за кулисами при выполнении кода:
💡 Совет. Начальное значение len(nums) равно 0, поскольку изначально список пуст. Последний столбец таблицы показывает длину списка в конце текущей итерации. Это значение используется для проверки условия перед началом следующей итерации.
Как видно из таблицы, пользователь вводит четные целые числа во второй, третьей, шестой и восьмой итерациях, и эти значения добавляются к списку чисел.
Перед началом «девятой» итерации условие снова проверяется, но теперь оно оценивается как False, поскольку список nums содержит четыре элемента (длина 4), поэтому цикл останавливается.
Если мы проверим значение списка nums после завершения процесса, то увидим следующее:
Именно то, что мы и ожидали, цикл while остановился, когда условие len(nums) было оценено как False .
Теперь вы знаете, как циклы while работают за кулисами, и видели несколько практических примеров, так что давайте углубимся в ключевой элемент циклов while: условие.
🔹 Советы по условиям в циклах While
Прежде чем вы начнете работать с циклами while, вы должны знать, что условие цикла играет центральную роль в функциональности и выводе цикла while.
Вы должны быть очень осторожны с оператором сравнения, который вы выбираете, потому что это очень распространенный источник ошибок.
Например, распространенные ошибки включают:
- Использование (меньше чем) вместо (меньше или равно) (или наоборот).
- Использование > (больше) вместо >= (больше или равно) (или наоборот).
Это может повлиять на количество итераций цикла и даже на его вывод.
Давайте рассмотрим пример:
Если мы напишем этот цикл while с условием i :
Мы видим этот вывод при выполнении кода:
Цикл завершает три итерации и останавливается, когда i становится равным 9 .
В этой таблице показано, что происходит за кулисами при выполнении кода:
- Перед первой итерацией цикла значение i равно 6, поэтому условие i равно True, и цикл запускается. Выводится значение i, а затем оно увеличивается на 1.
- На второй итерации цикла значение i равно 7, поэтому условие i равно True . Выполняется тело цикла, выводится значение i, а затем оно увеличивается на 1.
- В третьей итерации цикла значение i равно 8, поэтому условие i равно True . Выполняется тело цикла, выводится значение i, а затем оно увеличивается на 1.
- Условие снова проверяется перед началом четвертой итерации, но теперь значение i равно 9, поэтому i равно False, и цикл останавливается.
В данном случае мы использовали оператор сравнения в условии, но как вы думаете, что произойдет, если мы используем вместо него?
Мы видим этот вывод:
Цикл завершает еще одну итерацию, потому что теперь мы используем оператор "меньше или равно", поэтому условие остается истинным, когда i равно 9.
В этой таблице показано, что происходит за кулисами:
Выполнено четыре итерации. Условие снова проверяется перед началом «пятой» итерации. В этот момент значение i равно 10 , поэтому условие i имеет значение False, и цикл останавливается.
🔸 Бесконечные циклы While
Теперь вы знаете, как работают циклы while, но как вы думаете, что произойдет, если условие цикла никогда не будет иметь значение False?
Что такое бесконечные циклы While?
Помните, что циклы while не обновляют переменные автоматически (мы делаем это явно в нашем коде). Таким образом, нет никакой гарантии, что цикл остановится, если мы не напишем необходимый код, чтобы сделать условие False в какой-то момент во время выполнения цикла.
Если мы этого не сделаем и условие всегда оценивается как True , у нас будет бесконечный цикл, который является циклом while, который работает бесконечно (теоретически).
Бесконечные циклы обычно являются результатом ошибки, но они также могут быть вызваны намеренно, когда мы хотим бесконечно повторять последовательность операторов, пока не будет найден оператор break.
Давайте рассмотрим эти два типа бесконечных циклов в приведенных ниже примерах.
💡 Совет. Ошибка – это ошибка в программе, приводящая к неправильным или неожиданным результатам.
Пример бесконечного цикла
Это пример непреднамеренного бесконечного цикла, вызванного ошибкой в программе:
Проанализируйте этот код.
Разве вы не заметили, что чего-то не хватает в теле цикла?
Значение переменной i никогда не обновляется (это всегда 5 ). Следовательно, условие i всегда истинно, и цикл никогда не останавливается.
Если мы запустим этот код, результатом будет "бесконечная" последовательность Hello, World! сообщений, потому что тело цикла print("Hello, World!") будет выполняться бесконечно.
Чтобы остановить программу, нам нужно вручную прервать цикл, нажав CTRL + C .
Когда мы это сделаем, мы увидим ошибку KeyboardInterrupt, похожую на эту:
Чтобы исправить этот цикл, нам нужно будет обновить значение i в теле цикла, чтобы убедиться, что условие i в конечном итоге оценивается как False .
Это одно из возможных решений, увеличивающее значение i на 2 на каждой итерации:
Отлично. Теперь вы знаете, как исправить бесконечные циклы, вызванные ошибкой. Вам просто нужно написать код, чтобы гарантировать, что условие в конечном итоге будет оцениваться как False .
Давайте рассмотрим преднамеренные бесконечные циклы и то, как они работают.
🔹 Как создать бесконечный цикл с помощью While True
Мы можем сгенерировать бесконечный цикл намеренно, используя while True . В этом случае цикл будет выполняться бесконечно до тех пор, пока процесс не будет остановлен внешним вмешательством ( CTRL + C ) или пока не будет найден оператор break (подробнее о break вы узнаете чуть позже).
Это основной синтаксис:
Вместо того, чтобы писать условие после ключевого слова while, мы просто пишем непосредственно значение истинности, чтобы указать, что условие всегда будет иметь значение True .
Вот пример:
Цикл выполняется до тех пор, пока не будет нажато CTRL + C, но в Python также есть оператор break, который мы можем использовать непосредственно в нашем коде, чтобы остановить этот тип цикла.
Инструкция break
Этот оператор используется для немедленной остановки цикла. Вы должны думать об этом как о красном «знаке остановки», который вы можете использовать в своем коде, чтобы лучше контролировать поведение цикла.
Эта диаграмма иллюстрирует основную логику оператора break:
Оператор break
Это основная логика оператора break:
- Цикл while запускается, только если условие оценивается как True .
- Если в любой момент выполнения цикла обнаруживается оператор break, цикл немедленно останавливается.
- В противном случае, если разрыв не найден, цикл продолжает свое обычное выполнение и останавливается, когда условие оценивается как False .
Мы можем использовать break, чтобы остановить цикл while, когда условие выполняется в определенной точке его выполнения, поэтому обычно вы найдете его в условном операторе, например:
Это немедленно останавливает цикл, если условие истинно .
💡 Совет: вы можете (теоретически) написать оператор break в любом месте тела цикла. Это не обязательно должно быть частью условия, но мы обычно используем его, чтобы остановить цикл, когда заданное условие истинно .
Здесь у нас есть пример прерывания цикла while True:
Давайте посмотрим на это подробнее:
Первая строка определяет цикл while True, который будет выполняться бесконечно, пока не будет найден оператор break (или пока он не будет прерван нажатием CTRL + C ).
Вторая строка запрашивает ввод данных пользователем. Этот ввод преобразуется в целое число и присваивается переменной user_input .
Третья строка проверяет, является ли ввод нечетным.
Если это так, выводится сообщение Это число нечетное, и оператор break немедленно останавливает цикл.
В противном случае, если ввод четный, будет напечатано сообщение Это число четное, и цикл начнется снова.
Цикл будет выполняться бесконечно, пока не будет введено нечетное целое число, потому что это единственный способ найти оператор break.
Здесь у нас есть пример пользовательского ввода:
🔸 Резюме
- Циклы в то время как представляют собой программные структуры, используемые для повторения последовательности операторов, пока условие имеет значение True . Они останавливаются, когда условие оценивается как False .
- Когда вы пишете цикл while, вам нужно внести необходимые изменения в свой код, чтобы убедиться, что цикл в конечном итоге остановится.
- Бесконечный цикл – это цикл, который выполняется бесконечно и останавливается только при внешнем вмешательстве или при обнаружении оператора break.
- Вы можете остановить бесконечный цикл, нажав CTRL + C .
- Вы можете намеренно создать бесконечный цикл с помощью while True .
- С помощью оператора break можно немедленно остановить цикл while.
Я очень надеюсь, что моя статья вам понравилась и оказалась полезной. Теперь вы знаете, как работать с циклами While в Python.
Следуйте за мной в Твиттере @EstefaniaCassN, и если вы хотите узнать больше об этой теме, ознакомьтесь с моим онлайн-курсом Python Loops and Looping Techniques: Beginner to Advanced.
1.3 Условные операторы и циклы
В программах, которые мы рассмотрели к этому моменту, каждый из операторов выполняется один раз в заданном порядке. Большинство программ более сложны, потому что последовательность операторов и количество раз выполнения каждого из них могут различаться. Мы используем термин поток управления для обозначения последовательности операторов в программе.
Инструкции If.
использует Math.random() и оператор if-else для вывода результатов подбрасывания монеты.
Пока циклы.
Следующий фрагмент кода вычисляет наибольшую степень числа 2, которая меньше или равна заданному положительному целому числу n.
Для циклов.
Для обозначения. Многие циклы следуют одной и той же базовой схеме: инициализируйте индексную переменную некоторым значением, а затем используйте цикл while для проверки условия выхода, включающего индексную переменную, используя последний оператор в цикле while для изменения переменной индекса. Цикл Java for — это прямой способ выражения таких циклов.
Вложение.
Примеры циклов.
Приложения.
- Подразделения линейки.RulerN.java принимает целочисленный аргумент командной строки n и выводит строку длины подразделения линейки. Эта программа иллюстрирует одну из основных характеристик циклов — программа вряд ли может быть проще, но она может производить огромное количество выходных данных.
- Конечные суммы. Вы будете часто использовать вычислительную парадигму, используемую в PowersOfTwo.java. Он использует две переменные: одну в качестве индекса, управляющего циклом, а другую для накопления результатов вычислений. Программа HarmonicNumber.java использует ту же парадигму для вычисления суммы
Другие условные конструкции и циклы.
В. Как я могу проверить, равны ли две строки? Использование == не работает.
А. В этом одно из различий между примитивными типами (int, double, boolean) и ссылочными типами (String). . Мы узнаем о проверке строк на равенство в Разделе 3.1.
В. Почему оператор if (a
- Напишите программу AllEqual.java, который принимает три целочисленных аргумента командной строки и печатает equal, если все три равны, и not equal в противном случае. 2 + bx + c, выводит соответствующее сообщение об ошибке, если дискриминант отрицателен, и ведет себя соответствующим образом (избегая деления на ноль), если a равно нулю.
- Что (если вообще есть) неверно в каждом из следующих утверждений?
- если (a > b), то c = 0;
- если а > б
- если (а > б) с = 0;
- если (a > b) c = 0 иначе b = 0;
Творческие упражнения
- Такси Рамануджана. С. Рамануджан был индийским математиком, прославившимся своей интуицией в отношении чисел. Когда однажды английский математик Г. Х. Харди навестил его в больнице, Харди заметил, что номер его такси — 1729, довольно скучный номер. На что Рамануджан ответил: «Нет, Харди! Нет, Харди! Это очень интересное число. Это наименьшее число, которое можно выразить как сумму двух кубов двумя разными способами». Проверьте это утверждение, написав программу Ramanujan.java, которая принимает целочисленный аргумент командной строки n и выводит все целые числа, меньшие или равные n, которые могут быть выражены в виде суммы двух кубов двумя разными способами — найти различные положительные целые числа a, b, c и d такие, что a 3 + b 3 = c 3 + d 3 эм> . Используйте четыре вложенных цикла for.
Веб-упражнения
- Напишите программу RollDie.java, которая генерирует результат броска правильного шестигранного кубика (целое число от 1 до 6).
- Напишите программу, которая принимает три целочисленных аргумента командной строки a, b и c и выводит количество различных значений (1, 2 или 3) среди a, b и c.
- Напишите программу, которая принимает пять целочисленных аргументов командной строки и выводит медиану (третью по величине).
- (жесткий) Теперь попробуйте вычислить медиану 5 элементов таким образом, чтобы при выполнении она никогда не выполняла более 6 сравнений.
- Как создать бесконечный цикл с помощью цикла for?
Условие цикла while использует = вместо ==, поэтому это оператор присваивания (который делает done всегда false< /tt> и тело цикла никогда не будет выполнено). Лучше использовать стиль, чтобы не использовать ==.
Читайте также: