我如何在0和1之间迭代0.1步?
这表示step参数不能为零:
for i in range(0, 1, 0.1):
print(i)
我如何在0和1之间迭代0.1步?
这表示step参数不能为零:
for i in range(0, 1, 0.1):
print(i)
当前回答
scipy有一个内置的函数arange,它泛化了Python的range()构造函数,以满足您对浮点数处理的需求。
从scipy进口安排
其他回答
为了精品的完整性,一个功能性的解决方案:
def frange(a,b,s):
return [] if s > 0 and a > b or s < 0 and a < b or s==0 else [a]+frange(a+s,b,s)
我只是一个初学者,但我有同样的问题,当模拟一些计算。这是我如何试图解决这个问题,这似乎是工作与十进制步骤。
我也很懒,所以我发现很难写我自己的范围函数。
基本上,我所做的就是将xrange(0.0, 1.0, 0.01)更改为xrange(0, 100, 1),并在循环中使用除100.0。 我也担心,是否会有舍入错误。所以我决定测试一下,是否有。现在我听说,如果一个计算中的0.01不完全是浮点数0.01比较它们应该返回False(如果我错了,请告诉我)。
所以我决定通过运行一个简短的测试来测试我的解决方案是否适用于我的范围:
for d100 in xrange(0, 100, 1):
d = d100 / 100.0
fl = float("0.00"[:4 - len(str(d100))] + str(d100))
print d, "=", fl , d == fl
每一个都输出True。
现在,如果我完全错了,请告诉我。
Start和stop是包含的,而不是一个或另一个(通常不包括stop),并且没有导入,并使用生成器
def rangef(start, stop, step, fround=5):
"""
Yields sequence of numbers from start (inclusive) to stop (inclusive)
by step (increment) with rounding set to n digits.
:param start: start of sequence
:param stop: end of sequence
:param step: int or float increment (e.g. 1 or 0.001)
:param fround: float rounding, n decimal places
:return:
"""
try:
i = 0
while stop >= start and step > 0:
if i==0:
yield start
elif start >= stop:
yield stop
elif start < stop:
if start == 0:
yield 0
if start != 0:
yield start
i += 1
start += step
start = round(start, fround)
else:
pass
except TypeError as e:
yield "type-error({})".format(e)
else:
pass
# passing
print(list(rangef(-100.0,10.0,1)))
print(list(rangef(-100,0,0.5)))
print(list(rangef(-1,1,0.2)))
print(list(rangef(-1,1,0.1)))
print(list(rangef(-1,1,0.05)))
print(list(rangef(-1,1,0.02)))
print(list(rangef(-1,1,0.01)))
print(list(rangef(-1,1,0.005)))
# failing: type-error:
print(list(rangef("1","10","1")))
print(list(rangef(1,10,"1")))
Python 3.6.2 (v3.6.2:5fd33b5, july 8 2017, 04:57:36) [MSC v.1900 64 . 位(AMD64)]
sign = lambda x: (1, -1)[x < 0]
def frange(start, stop, step):
i = 0
r=len(str(step).split('.')[-1])
args=(start,stop,step)
if not step :return []
if all(int(i)==float(i) for i in args):
start,stop,step=map(int,args)
if sign(step)==1:
while start + i * step < stop:
yield round(start + i * step,r)
i += 1
else:
while start + i * step > stop:
yield round(start + i * step,r)
i += 1
range()内置函数返回一个整数值序列,所以您不能使用它来执行十进制步骤。
我会说使用while循环:
i = 0.0
while i <= 1.0:
print i
i += 0.1
如果你好奇的话,Python正在将你的0.1转换为0,这就是为什么它告诉你参数不能为0。