如何确保参数是数字列表?(python)
我一直在研究贝塞尔曲线,一切都运作得很好,但我想确保用户输入的是正确的内容。
我需要一个检查语句,看看用户输入的值是否是一个包含正好两个数字的列表,这两个数字可以是整数或浮点数。 如果有更多的信息也欢迎提供。
如果有人需要代码,这里给你们。 (可能在某个地方有个公式可以解决这个问题,而我这里的做法效率不高。^^)
#finding a point on vector based on start point, end and %
def findPoint(t, A, B):
'''
findPoint( 'float member of <0, 1>',
'coordinates of point A written as [x, y]',
'coordinates of point B written as [x, y]')
'''
x=(B[0]-A[0])*t+A[0]
y=(B[1]-A[1])*t+A[1]
return [x, y]
#find coordinates of a point on the bezier curve
def bezierCurve(t, *points):
pointList=[]
for X in points:
pointList.append(X)
while len(pointList) !=1:
tempList=[]
for i in xrange(0, len(pointList)-1):
tempList.append(findPoint(t, pointList[i], pointList[i+1]))
pointList=tempList
return pointList.pop()
2 个回答
0
这是一个用来测试你描述的参数的一行代码:
def check(l):
return len(l) == 2 and all(type(i) in (int, float) for i in l)
首先检查长度是否正好是2,然后检查这两个(或者所有)参数是否都是整数(int)或者浮点数(float)。
3
你可以用 all
来检查所有的元素是不是 int
(整数)或者 float
(浮点数)。
>>> l = [1,2,3]
>>> a = ['a','b','c']
>>> all(isinstance(i, int) for i in l)
True
>>> all(isinstance(i, int) for i in a)
False
另外,你还可以检查一下 len(list) == 2
,也就是这个列表的长度是不是2。
所以作为一个函数,它可能看起来像这样:
def twoNumValues(myList):
return len(myList) == 2 and all(isinstance(i, int) or isinstance(i, float) for i in myList)
或者
def twoNumValues(myList):
return len(myList) == 2 and all(type(i) in [float, int] for i in myList)