Как заменить range в питоне
Перейти к содержимому

Как заменить range в питоне

  • автор:

Замена цикла for in range на while python

Скажите, пожалуйста, как заменить цикл for in range на while ?

def what (a, b): res = a for i in range(b): res = res + 1 return res 

Отслеживать

2,816 2 2 золотых знака 18 18 серебряных знаков 58 58 бронзовых знаков

задан 5 мая 2020 в 18:22

Sveta Lantsman Sveta Lantsman

11 1 1 серебряный знак 4 4 бронзовых знака

Либо этот пример просто для понимания, как заменять один цикл на другой, либо я не понимаю, зачем тут цикл, если это просто функция суммы двух чисел, но выполненная через цикл

Питонистический подход к циклам for: range() и enumerate()

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

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

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

let scores = [54,67,48,99,27]; for(const i=0; i < scores.length; i++) < console.log(i, scores[i]); >/* 0 54 1 67 2 48 3 99 4 27 */

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

В предыдущем примере переменная i не имеет какого-то явного отношения к массиву scores . Она всего лишь хранит некое число, которое увеличивается на 1 в каждой итерации цикла, и которое, как оказывается, подходит для последовательного обращения к элементам массива по их индексам.

Старый (неудачный) способ работы с массивами

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

В результате вы можете обнаружить функцию range() и написать на Python нечто подобное следующему:

scores = [54,67,48,99,27] for i in range(len(scores)): print(i, scores[i]) """ 0 54 1 67 2 48 3 99 4 27 """

Проблема этого цикла заключается в том, что он не очень хорошо соответствует идеологии Python. В нём мы не перебираем список, а, вместо этого, используем вспомогательную переменную i для обращения к элементам списка.

На самом деле, даже в JavaScript существуют методы, позволяющие перебирать массивы, так сказать, без посредников. Речь идёт о циклах forEach и for of .

Использование функции enumerate()

Если вам нужно адекватным образом отслеживать «индекс элемента» в for -цикле Python, то для этого может подойти функция enumerate() , которая позволяет «пересчитать» итерируемый объект. Её можно использовать не только для обработки списков, но и для работы с другими типами данных — со строками, кортежами, словарями.

Эта функция принимает два аргумента: итерируемый объект и необязательное начальное значение счётчика.

Если начальное значение счётчика enumerate() не передаётся — оно, по умолчанию, устанавливается в 0 . Функция создаёт объект, генерирующий кортежи, состоящие из индекса элемента и самого этого элемента.

scores = [54,67,48,99,27] for i, score in enumerate(scores): print(i, score)

Такой код получился гораздо чище кода из предыдущего примера. Мы ушли от работы со списком индексов, мы перебираем сами значения, получая к ним прямой доступ в цикле for, и видим значения, с которыми работаем, в объявлении цикла.

Вот одна приятная возможность, которая понравится тем, кому нужно выводить нумерованные списки так, чтобы номер первого элемента был бы не 0 , в соответствии с его индексом, а 1 . Обычно для того, чтобы это сделать, приходится менять выводимый номер элемента. Например — так: i + 1 . При использовании же функции enumerate() достаточно передать ей, в качестве второго аргумента, то число, с которого нужно начинать нумерацию. В нашем случае — 1 :

scores = [54,67,48,99,27] for i, score in enumerate(scores, 1): print(i, score) """ 1 54 2 67 3 48 4 99 5 27 """

Итоги

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

Уважаемые читатели! Знаете ли вы ещё какие-нибудь способы применения функции enumerate() ? Кажутся ли вам циклы, построенные с использованием enumerate() , более читабельными, чем циклы, созданные с использованием range(len()) ?

Python цикл for — for i in range

Циклы являются одной из основных управляющих конструкций в любом языке программирования, и Python не является исключением.

В этой статье мы рассмотрим несколько примеров использования циклов for с функцией range() в Python.

Циклы for в Python

Циклы for повторяют определённый код для некоторого набора значений.

Из документации Python можно узнать, что в нем циклы for работают несколько иначе, чем в таких языках, как JavaScript или C.

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

В приведенном ниже примере мы используем цикл for для вывода каждого числа в нашем массиве.

Python: Цикл for и функция range

Представьте, что у нас есть ряд чисел от 0 до 9. Мы хотим сложить эти числа. Мы могли бы сделать это так:

sum = 0 i = 0 while i < 10: sum += i i += 1 print(sum) # =>45 

Сначала мы устанавливаем начальную сумму 0. Далее запускается цикл, в котором переменная i начинает принимать значения начиная с 0 и доходя до 10. На каждом шаге мы прибавляем значение i к нашей сумме и увеличиваем i на 1. Как только i становится равным 10, цикл заканчивается и программа выдаёт нам сумму всех чисел от 0 до 9 равную 45.

Такой код мы можем переписать на цикл for

sum = 0 for i in range(10): sum += i print(sum) # => 45 

Функция range()

Функция range в Python является встроенной функцией, которая создает последовательность чисел внутри определенного диапазона. Ее можно использовать в цикле for для контроля количества итераций.

У range() есть несколько вариантов использования:

  • range(stop) создает последовательность от 0 до stop — 1
  • range(start, stop) создает последовательность от start до stop — 1
  • range(start, stop, step) создает последовательность из чисел от start до stop — 1 , с шагом step

Пример с одним конечным значением мы рассмотрели выше. Рассмотрим другой — распечатаем на экран числа от 1 до 3:

 for i in range(1, 4): print(i) # => 1 # => 2 # => 3 

Теперь попробуем вывести числа в обратном порядке

for i in range(3, 0, -1): print(i) # => 3 # => 2 # => 1 

На примерах выше мы видим, что итерация завершается до конечного значения

Задание

Реализуйте функцию print_table_of_squares(from, to) , которая печатает на экран квадраты чисел. Она первое from и последнее to число печатает строку square of is

print_table_of_squares(1, 3) # => square of 1 is 1 # => square of 2 is 4 # => square of 3 is 9 

Упражнение не проходит проверку — что делать? ��

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

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

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

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *