Как убедиться, что параметр - это список чисел? (Python)

57
2

Я работаю над кривой Безье, и у меня все нормально работает, но я хочу, чтобы пользователь вводил правильный ввод.

Мне нужна проверка утверждения, если введенное значение представляет собой список, содержащий ровно два числа, пусть это целые числа или плавающие числа. Больше информации всегда приветствуется.

Если кому-то нужен код, вы здесь. (Вероятно, для этого есть только формула, и это здесь неэффективно. ^^)

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

спросил(а) 2014-08-14T01:29:00+04:00 6 лет, 2 месяца назад
1
Решение
71

Вы можете проверить, что все элементы являются int (или float), используя all

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

Так как функция может быть чем-то вроде

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)

ответил(а) 2014-08-14T01:31:00+04:00 6 лет, 2 месяца назад
42

Это однолинейная функция для проверки параметров, которые вы описываете:

def check(l):
return len(l) == 2 and all(type(i) in (int, float) for i in l)

Сначала проверьте, что длина равна ровно 2, затем проверьте, что оба (все) из них либо int, либо float.

ответил(а) 2014-08-14T01:36:00+04:00 6 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема