我可以将浮点值添加为我的范围吗?

时间:2017-10-04 06:42:42

标签: python python-3.x pycharm

帮助!我是python的新手,我想知道我可以在我的范围内使用浮点值吗?这是我想要做的。

x = float(input("Input number: "))
y = float(input("Input number 2: "))

for row in range(0, 5):
    for column in range(x, x*y):
        print(row, column)

但它告诉我在(x,x * y)点预期int而不是float。是否有可能将浮点数放在我的范围内?如果是这样,怎么样?

编辑:感谢大家的帮助,我现在就开始工作了!

4 个答案:

答案 0 :(得分:2)

没有。原因是它提出了太多关于如何处理它们的问题; user2357112的评论证明了最简单的,你不知道答案。另一个是存在浮点值,其中添加1.0不会产生不同的数字,因为它们的大小超过了它们的精度。

>>> 2.0**53
9007199254740992.0
>>> 2.0**53+1
9007199254740992.0

那是在我们达到非规范化值之前,包括无穷大而不是数字。

面对像这样的限制,range()仅针对int实现,而不是为了解其他类型的特殊情况而有一堆棘手。这些决策的主要指导原则记录为Python的Zen,您可以使用import this查看。

另一个微妙的例子是不完全输入的数字,例如0.1。如果你尝试以0.1为单位从0到1(不包括)的范围,你会得到多少个值?

>>> sum(0.1 for n in range(10))
0.9999999999999999
>>> i=0
>>> while i<1:
...   print(i)
...   i+=0.1
...
0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

答案 1 :(得分:1)

不,范围构造函数must be integers的参数。

您可以使用round(),int(),math.floor()和math.ceil()等函数将范围参数从float转换为int。

答案 2 :(得分:1)

我们可以通过以下几种方式解决这个问题:

x = float(input("Input number: "))
y = float(input("Input number 2: "))

# Just work with integers counting up by 1
for column in range(int(x), int(x * y)):
    print(row, column)

# Simulate, adjust 10 to whatever number of decimal places you need
for column in range(int(x * 10), int(x * y * 10)):
    print(row, column / 10)

# Use numpy to do a floating point range, with whatever step you need
from numpy import arange

for column in arange(x, x * y, 0.1):
    print(row, column)

答案 3 :(得分:0)

就我所知,range参数期望int但是对于你的问题,你可以想出这样的自定义范围

import itertools

x = float(input("Input number: "))
y = float(input("Input number 2: "))

def seq(start, end, step):
    assert(step != 0)
    sample_count = abs(end - start) / step
    return itertools.islice(itertools.count(start, step), sample_count)


for row in range(0, 5):
    for column in seq(x,x*y,0.1):# 0.1 is the difference you want in between
        print(row, column)