Питон тьютор ответы цикл while

Питон тьютор ответы цикл while

Цикл while («пока») позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.

Синтаксис цикла while в простейшем случае выглядит так:

while условие: блок инструкций

При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается и управление передается на следующую инструкцию после тела цикла while . Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.

Например, следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10. Видно, что цикл while может заменять цикл for . in range(. ) :

В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11 , поскольку именно при i==11 условие i

Вот еще один пример использования цикла while для определения количества цифр натурального числа n :

n = int(input()) length = 0 while n > 0: n //= 10 length += 1

В этом цикле мы отбрасываем по одной цифре числа, начиная с конца, что эквивалентно целочисленному делению на 10 ( n //= 10 ), при этом считаем в переменной length , сколько раз это было сделано.

В языке Питон есть и другой способ решения этой задачи: .

Инструкции управления циклом

После тела цикла можно написать слово else: и после него блок операций, который будет выполнен один раз после окончания цикла, когда проверяемое условие станет неверно:

Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно просто написать после окончания цикла. Смысл появляется только вместе с инструкцией break , использование которой внутри цикла приводит к немедленному прекращению цикла, и при этом не исполняется ветка else . Разумеется, инструкцию break осмыленно вызывать только из инструкции if , то есть она должна выполняться только при выполнении какого-то особенного условия.

Другая инструкция управления циклом — continue (продолжение цикла). Если эта инструкция встречается где-то посередине цикла, то пропускаются все оставшиеся инструкции до конца цикла, и исполнение цикла продолжается со следующей итерации.

Читайте также:  Apache mysql php server window

Инструкции break , continue и ветка else: можно использовать и внутри цикла for . Тем не менее, увлечение инструкциями break и continue не поощряется, если можно обойтись без их использования. Вот типичный пример плохого использования инструкции break .

while True: length += 1 n //= 10 if n == 0: break

Упражнения

A: Список квадратов

По данному целому числу \(N\) распечатайте все квадраты натуральных чисел, не превосходящие \(N\), в порядке возрастания.

B: Список степеней двойки

По данному числу \(N\) распечатайте все степени двойки, не превосходящие \(N\), в порядке возрастания.

Решение должно иметь сложность \(O(N)\), то есть операций возведения в степень пользоваться нельзя.

C: Список факториалов

По данному числу \(N\) распечатайте все факториалы, не превосходящие \(N\), в порядке возрастания.

D: Трискайдекафобия

Трискайдекафобия — боязнь числа 13. В особо сложных формах пациент боится и всех чисел, кратных 13.

Дано целое число \(N\). Выведите все целые числа по возрастанию, начиная с числа \(N\), пока не встретится число, кратное 13. Его выводить не нужно.

Программа должна быть решена при помощи одного цикла while, без if внутри цикла.

E: Ещё одно замечательное число

Найдите наименьшее двузначное число, которое равно сумме своих цифр, умноженной на 7. Выведите это число.

Напишите программу, содержащую только один цикл while, без if внутри цикла.

F: Минимальный делитель

Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.

В этой задаче нельзя использовать инструкцию if.

G: Утренняя пробежка

В первый день спортсмен пробежал \(x\) километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу \(y\) определите номер дня, на который пробег спортсмена составит не менее \(y\) километров.

Программа получает на вход действительные числа \(x\) и \(y\) и должна вывести одно натуральное число.

Названия \(x\) и \(y\) используются здесь для удобства обозначения. Называть переменные буквами \(x\) и \(y\) нельзя.

H: Точная степень двойки

Дано натуральное число N. Выведите слово YES , если число N является точной степенью двойки, или слово NO в противном случае.

Операцией возведения в степень пользоваться нельзя!

Инструкция if должна быть после цикла.

Обработка последовательности в while

Иногда нужно обрабатывать последовательность объектов до тех пор, пока не встретится какой-то «особый» объект. И тут есть два варианта: нужно остановиться после обработки «особого» объекта, либо до.

Если «особый» элемент нужно обработать, то обычно пишут так:

x = любое_не_особое_значение while x is not особый: x = взять_следующий обработать

Если «особый» элемент НЕ нужно обрабатывать (то есть нужно остановиться сразу), то обычно пишут так:

x = взять_следующий while x is not особый: обработать x = взять_следующий

Первый вариант использования цикла предпочтителен сразу по нескольким причинам. Во-первых, каждая итерация цикла начинается с взятия нового значения. Если мы на предыдущей итерации сделали continue , то в этой итерации сразу всё ок. Во-вторых, значение заполняется ровно в одном месте. Если код для получения нового значения длинный, то он не будет дублироваться. Ну и без дублирования кода нельзя забыть исправить дубль.

Читайте также:  Направления программирования для python

Начиная с python 3.8 (у нас на сервере ещё python 3.5, увы) можно писать и второй вариант обработки без повторов, вот так:

while (x := взять_следующий) is not особый: обработать

I: Повторитель

Пользователь вводит слова по одному в строке, программа выводит эти слова, разворачивая их в обратном порядке. Программа останавливается, когда пользователь введёт “STOP!”

J: Длина последовательности

Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность завершается числом 0, при считывании которого программа должна закончить свою работу и вывести количество членов последовательности (не считая завершающего числа 0).

Числа, следующие за числом 0, считывать не нужно.

K: Произведение последовательности

Определите произведение всех элементов последовательности, завершающейся числом 0.

L: Среднее значение последовательности

Определите среднее значение всех элементов последовательности, завершающейся числом 0.

Гарантируется, что в последовательности есть хотя бы один элемент (кроме завершающего числа 0).

M: Количество четных элементов последовательности

Определите количество четных элементов в последовательности, завершающейся числом 0.

Бесконечность

Когда мы ищем что-то самое большое или самое маленькое, то часто удобно сначала положить в переменную что-то, что уж точно меньше (ну или больше), чем всё, что нам может встретиться. В питоне для этого можно использовать бесконечности:
$\infty = $ float(‘inf’) , $-\infty = $ float(‘-inf’)

x = float('inf') x > 10000 # True x > 1098465164864134681315 # True x > 1e300 # True

Ещё один плюс бесконечностей в том, что их легко отличить от «обычных» чисел. Если в переменной осталась бесконечность, значит ничего дельного мы не встретили.

N: Минимум последовательности

Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наименьшего элемента последовательности.

Гарантируется, что в последовательности есть хотя бы один элемент (кроме завершающего числа 0).

O: Количество чётных чисел в начале последовательности

Последовательность завершается числом 0. Определите, какое число чётных чисел идёт в начале последовательности (длину наибольшего префикса последовательности, состоящего только из чётных чисел). Сам 0 при этом не считается элементом последовательности.

В этой задаче нельзя использовать if.

Источник

Питон тьютор ответы цикл while

Цикл for , также называемый циклом с параметром, в языке Питон богат возможностями. В цикле for указывается переменная и множество значений, по которому будет пробегать переменная. Множество значений может быть задано списком, кортежем, строкой или диапазоном.

Вот простейший пример использования цикла, где в качестве множества значений используется кортеж:

i = 1 for color in 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet': print('#', i, ' color of rainbow is ', color, sep = '') i += 1

В этом примере переменная color последовательно принимает значения ‘red’ , ‘orange’ и т.д. В теле цикла выводится сообщение, которое содержит название цвета, то есть значение переменной color , а также номер итерации цикла число, которое сначала равно 1, а потом увеличивается на один (инструкцией i += 1 с каждым проходом цикла.

Читайте также:  Using rgb in css

Инструкция i += 1 эквивалентна конструкции i = i + 1 (это просто сокращенная запись). Такую сокращенную запись можно использовать для всех арифметических операций: *= , -= , /= , %= .

В списке значений могут быть выражения различных типов, например:

for i in 1, 2, 3, 'one', 'two', 'three': print(i)

При первых трех итерациях цикла переменная i будет принимать значение типа int , при последующих трех — типа str .

2. Функция range

Как правило, циклы for используются либо для повторения какой-либо последовательности действий заданное число раз, либо для изменения значения переменной в цикле от некоторого начального значения до некоторого конечного.

Для повторения цикла некоторое заданное число раз n можно использовать цикл for вместе с функцией range :

for i in range(4): # равносильно инструкции for i in 0, 1, 2, 3: # здесь можно выполнять циклические действия print(i) print(i ** 2) # цикл закончился, поскольку закончился блок с отступом print('Конец цикла')

В качестве n может использоваться числовая константа, переменная или произвольное арифметическое выражение (например, 2 ** 10 ). Если значение n равно нулю или отрицательное, то тело цикла не выполнится ни разу.

Функция range может также принимать не один, а два параметра. Вызов range(a, b) означает, что индексная переменная будеть принимать значения от a до , то есть первый параметр функции range , вызываемой с двумя параметрами, задает начальное значение индексной переменной, а второй параметр — первое значение, которое индексная переменная принимать не будет. Если же a ≥ b , то цикл не будет выполнен ни разу. Например, для того, чтобы просуммировать значения чисел от 1 до n можно воспользоваться следующей программой:

sum = 0 n = 5 for i in range(1, n + 1): sum += i print(sum)

В этом примере переменная i принимает значения 1, 2, . n , и значение переменной sum последовательно увеличивается на указанные значения.

Наконец, чтобы организовать цикл, в котором индексная переменная будет уменьшаться, необходимо использовать функцию range с тремя параметрами. Первый параметр задает начальное значение индексной переменной, второй параметр — значение, до которого будет изменяться индексная переменная (не включая его!), а третий параметр — величину изменения индексной переменной. Например, сделать цикл по всем нечетным числам от 1 до 99 можно при помощи функции , а сделать цикл по всем числам от 100 до 1 можно при помощи .

Более формально, цикл при d > 0 задает значения индексной переменной i = a , i = a + d , i = a + 2 * d и так для всех значений, для которых i < b . Если же d < 0 , то переменная цикла принимает все значения i >b .

3. Настройка функции print()

По умолчанию функция print() принимает несколько аргументов, выводит их через пробел, после чего ставит перевод строки. Это поведение можно изменить, используя именованные параметры sep (разделитель) и end (окончание).

print(1, 2, 3) print(4, 5, 6) print(1, 2, 3, sep=', ', end='. ') print(4, 5, 6, sep=', ', end='. ') print() print(1, 2, 3, sep='', end=' -- ') print(4, 5, 6, sep=' * ', end='.')

Источник

Оцените статью