如何确保参数是数字列表?(python)

1 投票
2 回答
2173 浏览
提问于 2025-04-18 17:13

我一直在研究贝塞尔曲线,一切都运作得很好,但我想确保用户输入的是正确的内容。

我需要一个检查语句,看看用户输入的值是否是一个包含正好两个数字的列表,这两个数字可以是整数或浮点数。 如果有更多的信息也欢迎提供。

如果有人需要代码,这里给你们。 (可能在某个地方有个公式可以解决这个问题,而我这里的做法效率不高。^^)

#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)

撰写回答