[英]How can i get a range of floats in python?
for i in range(1.5,21):
print(i)
每当我运行此代码时,我都会收到错误消息:
TypeError: 'float' object cannot be interpreted as an integer
是否有任何内置模块可用于获取一系列浮点数?
假设您知道要将范围1.5, 21
划分为多少个值, numpy.linspace
将完成这项工作:
import numpy
for i in numpy.linspace(1.5,21,num=10):
print(i)
output:
$ python main.py
1.5
3.6666666666666665
5.833333333333333
8.0
10.166666666666666
12.333333333333332
14.5
16.666666666666664
18.833333333333332
21.0
或者,如果您宁愿 go 而不是 output 值的数量,您可以使用numpy.arange
:
import numpy
for i in numpy.arange(1.5,21,step=0.5):
print(i)
output:
$ python main.py
1.5
2.0
2.5
3.0
[-- cut --]
19.0
19.5
20.0
20.5
您无法获得range
float
。 想想看。 计算机可以完成一项半(1.5)的任务吗? 如果您只是想给它一个浮点数并将其向上(或向下)舍入,然后使用round()
function,这会将浮点数舍入为int
我想这对您来说是一个最佳解决方案,但请注意,此代码有时会返回错误的结果! 作为重复元素甚至丢失一些!
def frange(*args):
((res:=[],gdigits:=lambda n,r:len(str(n)[::-1].split('.')[0])if'.'in str(n)else r,chf:=lambda n:True if type(n)==float else False),
((len(args)==0)and(
a:=0.,
b:=10.,
c:=1.)),
((len(args)==1)and((chf(args[0])and(
a:=0.,
b:=args[0]*1.,
c:=1/10**gdigits(args[0],0))
)or(
a:=0,
b:=args[0],
c:=10**gdigits(args[0],0)))),
((len(args)==2)and((any(map(lambda x: True if int(x)!=x else False,args))and(
a:=args[0]*1.,
b:=args[1]*1.,
c:=1/10**max(gdigits(a,len(str(a))),gdigits(b,len(str(b)))))
)or(
a:=args[0],
b:=args[1],
c:=1))),
((len(args)==3)and((any(map(lambda x: True if int(x)!=x else False,args))and(
a:=args[0]*1.,
b:=args[1]*1.,
c:=args[2]*1. if args[2]!=0 else 1)
)or(
a:=args[0],
b:=args[1],
c:=args[2] if args[2]!=0 else 1)))
)
res.append(a)
(a<b and [res.append(a:=round(a+c,len(str(c)[::-1].split('.'))if'.'in str(c)else 0)) for _ in iter(lambda:a<b,0)])
(b<a and [res.append(a:=round(a-c,len(str(c)[::-1].split('.'))if'.'in str(c)else 0)) for _ in iter(lambda:b<a,0)])
return (i for i in res)
print('**** Test Cases ****\n')
print(f'no args: {list(frange())}\n')
print(f'float arg: {list(frange(0.58))}\n')
print(f'int arg: {list(frange(10))}\n')
print(f'2 float args: {list(frange(1.11,1.3))}\n')
print(f'reversed 2 float args: {list(frange(1.3,1.11))}\n')
print(f'2 int args: {list(frange(3,8))}\n')
print(f'reversed 2 int args: {list(frange(8,3))}\n')
print(f'3 float args: {list(frange(1.75,3.4,0.05))}\n')
print(f'reversed 3 float args: {list(frange(3.4,1.75,0.05))}\n')
print(f'3 int args: {list(frange(2,11,3))}\n')
print(f'reversed 3 int args: {list(frange(11,2,3))}\n')
print(f'mixed 1: {list(frange(3,12.4,0.2))}\n')
print(f'mixet 2: {list(frange(12,1,1.2))}\n')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.