Как сделать повтор программы в python

В предыдущем уроке вы разобрались с операторами break и continue . Еще ранее ознакомились с циклами while и for. Настало время объединить знания и изучить конструкции for/else и while/else .

Вообще, это те же самые циклы for и while , в которые, опционально, добавлен блок else :

for i in range(5):
print(i)
else:
print(‘Things are good’)

Казалось бы, чем этот код по функционалу отличается от этого:

for i in range(5):
print(i)
print(‘Things are good’)

В данном случае – ничем. В прошлом уроке мы обогатили знания новым оператором break . Давайте применим его. Например, если переменная i равна трем, то мы прерываем цикл:

for i in range(5):
print(i)
if i == 3:
break
else:
print(‘Things are good’)

Теперь вы увидите разницу между предыдущим кодом и этим:

for i in range(5):
print(i)
if i == 3:
break
print(‘Things are good’)

То есть блок else в конструкции for/else будет выполнен, если цикл полностью завершил итерацию, но не будет выполнен, если цикл прерван оператором break . В определенных типах задач эта конструкция может пригодиться.

Уроки Python / Повторное использование кода с помощью функций и модулей (часть 1)

Конструкция while/else аналогична рассмотренной инструкции for/else .

В этом уроке еще раз рассмотрели инструкции while/else и for/else . Так же убедились, что в Python нет ненужных конструкций, просто некоторые подходят только для определенного класса задач.

Источник: codebra.ru

Python: Цикл While

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

В этом уроке мы переходим к одной из самых сложных базовых тем в программировании — циклам.

Прикладные программы помогают управлять сотрудниками, финансами и могут развлекать. Несмотря на различия, они выполняют заложенные в них алгоритмы, которые похожи. Алгоритм — это последовательность действий, которая приводит к ожидаемому результату.

Представим, что у нас есть книга, и мы хотим найти в ней конкретную фразу. Саму фразу мы помним, но не знаем, на какой она странице. Нам придется последовательно просматривать страницы до тех пор, пока не найдем нужную. Этот процесс и называется алгоритмом.

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

Напишем функцию с простым циклом, который будет n раз выводить на экран строку ‘Hello!’ :

def print_hello(n): counter = 0 while counter < n: print(‘Hello!’) counter = counter + 1 print_hello(2) # =>Hello! # => Hello!

Теперь проанализируем пример функции с циклом, который выводит на экран числа от одного до числа-аргумента:

print_numbers(3) # => 1 # => 2 # => 3

Эту функцию невозможно реализовать уже изученными средствами, так как количество выводов на экран заранее неизвестно. А с циклами проблем не будет:

Python-джедай #7 — Циклы


def print_numbers(last_number): # i сокращение от index (порядковый номер) # используется по общему соглашению во множестве языков # как счетчик цикла i = 1 while i 1 # => 2 # => 3 # => finished!

Цикл while состоит из трех элементов:

  • Ключевое слово while
  • Предикат — условие, которое указывается после while и вычисляется на каждой итерации
  • Блок кода — тело цикла
Читайте также:
Программа простор касса инструкция по применению

Каждое выполнение тела называется итерацией. В примере выше print_numbers(3) вызвал три итерации, на каждой из которых была выведена на экран переменная i . Конструкция читается так: «делать то, что указано в теле цикла, пока истинно условие i

Разберем работу этого кода для вызова print_numbers(3) :

# Инициализируется i i = 1 # Предикат возвращает true, поэтому выполняется тело цикла while 1

Процесс, который порождает цикл, должен остановиться. За это отвечает программист.

Обычно задача сводится к введению переменной — счетчику цикла. Сначала он инициализируется — ему задается начальное значение. В нашем примере это строчка i = 1 . Затем в условии цикла проверяется, не достиг ли счетчик своего предельного значения.

Предельное значение в примере определяется аргументом функции. Если условие цикла не выполнено, то тело не выполняется и интерпретатор двигается дальше — работает с инструкциями после цикла.

Если условие цикла истинно, то выполняется тело, в котором находится элемент остановки — изменение счетчика. Обычно его делают в конце тела, и это изменение — место, где нельзя обойтись без переменной. В примере выше за изменение отвечает строчка i = i + 1 .

На этом моменте новички много ошибаются. Например, можно забыть увеличить счетчик или неправильно проверить его в предикате. Это приведет к зацикливанию — цикл будет работать бесконечно и программа никогда не остановится. В таком случае ее нужно завершить принудительно.

def print_numbers(last_number): i = 1 # Этот цикл никогда не остановится # и будет печатать всегда одно значение while i

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

while True: # Что-то делаем

Без циклов невозможно обойтись, когда алгоритм решения задачи требует повторения каких-то действий и количество этих операций заранее неизвестно.

Задание

Модифицируйте функцию print_numbers() так, чтобы она выводила числа в обратном порядке. Для этого нужно идти от верхней границы к нижней. То есть счётчик должен быть инициализирован максимальным значением, а в теле цикла его нужно уменьшать до нижней границы.

Пример вызова и вывода:

print_numbers(4)
4
3
2
1
finished!
Упражнение не проходит проверку — что делать?

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя

Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Читайте также:
Как работать в программе Microsoft

Прочитал урок — ничего не понятно

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

Полезное

Определения

  • Цикл While — инструкция для повторения кода, пока удовлетворяется какое-то условие.

Источник: code-basics.com

Цикл for

Цикл for в языке программирования Python предназначен для перебора элементов структур данных и других составных объектов. Это не цикл со счетчиком, каковым является for во многих других языках.

Что значит перебор элементов? Например, у нас есть список, состоящий из ряда элементов. Сначала берем из него первый элемент, затем второй, потом третий и так далее. С каждым элементом мы выполняем одни и те же действия в теле for . Нам не надо извлекать элементы по их индексам, заботиться, на каком из них список заканчивается, и следующая итерация бессмысленна. Цикл for сам переберет и определит конец.

>>> spisok = [10, 40, 20, 30] >>> for element in spisok: . print(element + 2) . 12 42 22 32

После ключевого слова for используется переменная под именем element . Имя здесь может быть любым. Нередко используют i . На каждой итерации цикла for ей будет присвоен очередной элемент из списка spisok . Так при первой прокрутке цикла идентификатор element связан с числом 10, на второй – с числом 40, и так далее. Когда элементы в spisok заканчиваются, цикл for завершает свою работу.

С английского «for» переводится как «для», «in» как «в». Перевести конструкцию с языка программирования на человеческий можно так: для каждого элемента в списке делать следующее (то, что в теле цикла).

В примере мы увеличивали каждый элемент на 2 и выводили его на экран. При этом сам список конечно же не изменялся:

>>> spisok [10, 40, 20, 30]

Нигде не шла речь о перезаписи его элементов, они просто извлекались и использовались. Однако бывает необходимо изменить сам список, например, изменить значение каждого элемента в нем или только определенных, удовлетворяющих определенному условию. И тут без переменной, обозначающей индекс элемента, случаев не обойтись:

>>> i = 0 >>> for element in spisok: . spisok[i] = element + 2 . i += 1 . >>> spisok [12, 42, 22, 32]

Но если мы вынуждены использовать счетчик, то выгода от использования цикла for не очевидна. Если знать длину списка, то почему бы не воспользоваться while . Длину можно измерить с помощью встроенной в Python функции len() .

>>> i = 0 >>> while i < len(spisok): . spisok[i] = spisok[i] + 2 # или spisok[i] += 2 . i = i + 1 # или i += 1 . >>> spisok [14, 44, 24, 34]

Кроме того, с циклом while мы избавились от переменной element .

Функция range()

Теперь пришло время познакомиться со встроенной в Python функцией range() . «Range» переводится как «диапазон». Она может принимать один, два или три аргумента. Их назначение такое же как у функции randrange() из модуля random . Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг.

Читайте также:
Как назвать папку в телефоне с программами

Однако, в отличие от randrange() , функция range() генерирует не одно случайное число в указанном диапазоне. Она вообще не генерирует случайные числа. Она генерирует последовательность чисел в указанном диапазоне. Так, range(5, 11) сгенерирует последовательность 5, 6, 7, 8, 9, 10. Однако это будет не структура данных типа «список». Функция range() производит объекты своего класса – диапазоны:

>>> a = range(-10, 10) >>> a range(-10, 10) >>> type(a)

Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам:

>>> a[0] -10 >>> a[5] -5 >>> a[15] 5 >>> a[-1] 9

Хотя изменять их нельзя, так как, в отличие от списков, объекты range() относятся к группе неизменяемых:

>>> a[10] = 100 Traceback (most recent call last): File «», line 1, in TypeError: ‘range’ object does not support item assignment

Цикл for и range()

Итак, зачем нам понадобилась функций range() в теме про цикл for ? Дело в том, что вместе они образуют неплохой тандем. For как цикл перебора элементов, в отличие от while , позволяет не следить за тем, достигнут ли конец структуры.

Не надо вводить счетчик для этого, изменять его и проверять условие в заголовке. С другой стороны, range() дает последовательность целых чисел, которые можно использовать как индексы для элементов того же списка.

>>> range(len(spisok)) range(0, 4)

Здесь с помощью функции len() измеряется длина списка. В данном случае она равна четырем. После этого число 4 передается в функцию range() , и она генерирует последовательность чисел от 0 до 3 включительно. Это как раз индексы элементов нашего списка.

Теперь «соединим» for и range() :

>>> spisok = [14, 44, 24, 34] >>> for i in range(len(spisok)): . spisok[i] += 2 . >>> spisok [16, 46, 26, 36]

Еще раз обратим внимание, в заголовке цикла for берутся элементы вовсе не списка, а объекта range .

Практическая работа

  1. Заполните список случайными числами. Используйте в коде цикл for, функции range() и randint() .
  2. Если объект range (диапазон) передать встроенной в Python функции list() , то она преобразует его к списку. Создайте таким образом список с элементами от 0 до 100 и шагом 17.
  3. В заданном списке, состоящем из положительных и отрицательных чисел, посчитайте количество отрицательных элементов. Выведите результат на экран.
  4. Напишите программу, которая заполняет список пятью словами, введенными с клавиатуры, измеряет длину каждого слова и добавляет полученное значение в другой список. Например, список слов – [‘yes’, ‘no’, ‘maybe’, ‘ok’, ‘what’], список длин – [3, 2, 5, 2, 4]. Оба списка должны выводиться на экран.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Источник: younglinux.info

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru