Как сделать шаг float в for python
Перейти к содержимому

Как сделать шаг float в for python

  • автор:

Как переписать цикл, чтобы сделать шаг 0.01?

TypeError Traceback (most recent call last) in 2 print(type(x)) 3 sum1=0 —-> 4 for x in range(-math.pi,math.pi,0.01): 5 k=1 6 for k in range(N+1): TypeError: ‘float’ object cannot be interpreted as an integer

Отслеживать
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 3 окт 2019 в 17:45
379 1 1 золотой знак 5 5 серебряных знаков 16 16 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Range не принимает float аргументы. Вам придется цикл сделать иначе

x = -math.pi while x < math.pi : x+= 0.01 

Отслеживать
ответ дан 3 окт 2019 в 17:49
16.4k 2 2 золотых знака 15 15 серебряных знаков 24 24 бронзовых знака

Почему бы вам не использовать модуль Numpy более широко?

x=0 N=5 sum1=0 for x in np.arange(-np.pi, np.pi, 0.01): for k in range(1, N+1): sum1+=(np.sign((2*k-1)*x))/(2*k-1)*(4/np.pi) sum1=sum1*(4/np.pi) 
In [154]: print(sum1) -1.0326167037008748e+67 

PS судя по результату, стремящемуся к минус бесконечности, у вас ошибка в формуле.

PPS скорее всего формулу можно реализовать без циклов, используя векторизированные Numpy функции, но для этого понадобится более подробное описание формулы.

Помощники цикла for в Python

Follow us on Google Plus Follow us on rss

В языке Python заложено много полезных инструментов, способных значительно упростить жизнь разработчику, если о них знать и уметь использовать. Мы рассмотрим четыре функции, которые помогут нам при работе с циклом for, а в некоторых случаях позволят вообще отказаться от него!

О операторах ветвления и циклах написано в уроке “Python. Урок 5. Условные операторы и циклы”.

В статье рассмотрим следующие функции:

Функция range

Функция range() создает объект, который внутри себя содержит итератор, выдающий элементы из диапазона, определяемого аргументами функции.

Создадим объект range .

>>> r = range(3)

Получим его итератор.

>>> ri = iter(r)

Используя next() , извлечем из него все элементы.

>>> next(ri) 0 >>> next(ri) 1 >>> next(ri) 2 >>> next(ri) Traceback (most recent call last): File "", line 1, in next(ri) StopIteration

Через параметры функции range можно задать диапазон и шаг. Создадим range , генерирующий числа от 1 до 10 с шагом 3.

>>> ri2 = iter(range(1,10,3)) >>> next(ri2) 1 >>> next(ri2) 4 >>> next(ri2) 7 >>> next(ri2) Traceback (most recent call last): File "", line 1, in next(ri2) StopIteration

Объект range идеально подходит для использования в цикле for . Работа цикла for организована следующим образом:

  • получаем итератор у объекта, который предоставляет данные;
  • используя функцию next() , извлекаем элементы на каждой итерации цикла;
  • если произошел выброс исключения StopIteration , то выходим из цикла.

Пример: выведем список целых чисел от 0 до 2 на экран.

>>> for i in range(3): print(i) 0 1 2

Список чисел от 1 до 10 с шагом 2.

>>> for i in range(1, 10, 2): print(i) 1 3 5 7 9

Range можно использовать в List Comprehensions .

>>> [i for i in range(3)] [0, 1, 2]

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

Функция enumerate

Функция enumerate() конструирует генератор по переданной в нее (через аргумент) объект. Она предоставляет кортежи, состоящие из двух элементов, первый из которых – индекс, а второй – значение, извлекаемое из объекта.

Рассмотрим простой пример: найти в строке первое вхождение символа ‘o’ и вывести номер его позиции. Эта задача может быть решена так.

>>> msg = "hello!" >>> i = 0 >>> for sym in msg: if sym == 'o': print("index font-weight: 400;">В этой программе нам пришлось заводить дополнительную переменную i, значение которой на каждой итерации цикла мы увеличивали на единицу. Это не очень удобно! Использование функции enumerate() позволит упростить решение.

>>> msg = "hello!" >>> for tp in enumerate(msg): if 'o' in tp: print("index font-weight: 400;">В процессе работы цикла for из объекта, созданного функцией enumerate(), будут последовательно извлекаться следующие кортежи:

(0, ‘h’) (1, ‘e’) (2, ‘l’) (3, ‘l’) (4, ‘o’)

После извлечения кортежа (4, ‘o’) , на экран выведется соответствующее сообщение и цикл завершится. Выведем все кортежи, получаемые из строки “hello!” с помощью функции enumerate() .

>>> for tp in enumerate(msg): print(tp) (0, 'h') (1, 'e') (2, 'l') (3, 'l') (4, 'o') (5, '!')

Функция enumerate() позволяет получить индексы элементов объекта при обходе его в цикле for без введения дополнительных переменных.

Функция map

Функция map() предоставляет возможность применить указанную функцию к каждому элементу объекта. В результате получим список из модифицированных элементов исходного объекта.

Решим задачу возведения в квадрат всех элементов списка с использованием цикла for .

>>> numbers = [1, 2, 3, 4, 5] >>> sq_nums = [] >>> for num in numbers: sq_nums.append(num**2) >>> sq_nums [1, 4, 9, 16, 25]

Эту задачу можно также решить с использованием List Comprehensions .

>>> sq_nums = [num**2 for num in numbers] >>> sq_nums [1, 4, 9, 16, 25]

Точно такой же результат получим, если воспользуемся функций map() .

>>> sq_nums = list(map(lambda x: x**2, numbers)) >>> sq_nums [1, 4, 9, 16, 25]

На первый взгляд такой подход может показаться сложнее предыдущего, но вся его мощь заключается в первом аргументе – функции, которая используется для модификации значений элементов объекта. Это может быть как lambda -функция, как в нашем примере, так функция, созданная с использованием ключевого слова def .

Результат работы функции map() можно использовать в цикле for .

>>> msg = "simple" >>> for sym in map(lambda x: x+'-', msg): print(sym, end='') s-i-m-p-l-e-

Используйте map() , если вам необходимо обработать элементы объекта, используя определенную функцию .

Функция zip

Функция zip() позволяет в одном цикле for производить параллельную обработку данных. Это очень мощный инструмент! Zip принимает в качестве аргументов объекты, элементы которых будут объединены в кортежи, полученную структуру можно превратить в список кортежей, если это необходимо.

Решим следующую задачу, демонстрирующую возможности zip() : в нашем распоряжении есть два списка, построим третий, каждый элемент которого будет формироваться как сумма элемента из первого списка и элемента из второго, умноженного на два.

>>> a = [1, 3, 5, 7, 9] >>> b = [2, 4, 6, 8, 10] >>> c = [] >>> for (x, y) in zip(a, b): c.append(x + 2 * y) >>> c [5, 11, 17, 23, 29]

Результат объединения списков с помощью функции zip() представлен ниже. Элементы исходных списков группируются попарно, образуя кортежи.

>>> a = [1, 3, 5, 7, 9] >>> b = [2, 4, 6, 8, 10] >>> list(zip(a, b)) [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

Если в функцию zip() передать три списка, то получим кортежи, состоящие из трех элементов.

>>> a = [1, 3, 5, 7, 9] >>> b = [2, 4, 6, 8, 10] >>> c = [10, 11, 12, 13, 14] >>> list(zip(a, b, c)) [(1, 2, 10), (3, 4, 11), (5, 6, 12), (7, 8, 13), (9, 10, 14)]

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

>>> a = [1, 3, 5, 7, 9] >>> d = [20, 21] >>> list(zip(a, d)) [(1, 20), (3, 21)]

С помощью функции zip() можно создавать словари.

>>> a = [1, 3, 5, 7, 9] >>> keys = ['a', 'b', 'c', 'd', 'e'] >>> dict(zip(keys, a))

Используйте zip() для параллельной обработки данных и быстрого построения структур данных. Такое решение будет функциональным и лаконичным!

Как в python в цикле for задать шаг 0.5?

for _ in range(1,10,0.5):
TypeError: 'float' object cannot be interpreted as an integer
ты бы сам проверил прежде чем писать. но не работает цикл с числом типа float!
у тебя шаг от 1 до 10 идет. а что такое пол шага? то есть вместо 10 шагов ты сделаешь 20 полушагов. смысл думаю понятен? я так понимаю чел нужно чтоб какое то действие выполнялось только за 2 прохода цикла вот он и выразился как 0.5 шаг. так тут условие в помошь.

Как заставить функцию range работать с float в python?

Есть арифметическая функция понимающия переменные в integer, мне нужно написать скрипт который сможет принимать float в качестве step size для данной функции. Как можно это реализовать?

x = int(raw_input("Enetr your value for the first X: ")) y = int(raw_input("Enter your value for the last X: ")) z = int(raw_input("Enter step size wanted: ")) def function(x): return x**2 +4 * x-4 for i in xrange(x,y,z): print "f(<>) = <>".format(i, function(i))
  • Вопрос задан более трёх лет назад
  • 9983 просмотра

Комментировать

Решения вопроса 1

data scientist

Как вариант - модуль numpy.

import numpy as np x=np.arange(0.01,1.00,0.01) #x=array([ 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09. 1.00])

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Ответы на вопрос 2

Люблю сгущенку и функциональное программирование

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

for i in xrange(x,y): i *= z print "f(<>) = <>".format(i, function(i))

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

mututunus

Backend developer (Python, Golang)

def frange(end, start=0.0, step=0.1): i = start while i < end: yield i i += step

Ответ написан более трёх лет назад

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

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