帮助!我是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。是否有可能将浮点数放在我的范围内?如果是这样,怎么样?
编辑:感谢大家的帮助,我现在就开始工作了!
答案 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)