Мой код сравнивает 2 списка кортежей и отображает «True», если все элементы первого кортежа находятся в диапазоне второго кортежа.Диапазон задается аргументом "ar".
#include <Python.h>
PyObject *compare( PyObject *self, PyObject *args )
{
PyObject *pList1;
PyObject *pList2;
PyObject *pItem1;
PyObject *pItem2;
Py_ssize_t n;
int i, i2;
int ar, ar2;
int c, s, b;
if (!PyArg_ParseTuple(args, "O!O!i", &PyList_Type, &pList1, &PyList_Type, &pList2, &ar)) {
PyErr_SetString(PyExc_TypeError, "parameter must be a list.");
return NULL;
}
ar2 = ar * 2;
n = PyList_Size(pList1);
for (i=0; i<n; i++) {
pItem1 = PyList_GetItem(pList1, i);
if(!PyTuple_Check(pItem1)) {
PyErr_SetString(PyExc_TypeError, "list items must be tuples.");
return NULL;
}
pItem2 = PyList_GetItem(pList2, i);
if(!PyTuple_Check(pItem2)) {
PyErr_SetString(PyExc_TypeError, "list items must be tuples.");
return NULL;
}
for (i2=0; i2<3; i2++) {
c = (int) PyInt_AsLong(PyTuple_GetItem(pItem1, i2));
s = (int) PyInt_AsLong(PyTuple_GetItem(pItem2, i2));
s -= ar;
b += ar2;
if(!(s <= c && c <= b)) {
return Py_False;
}
}
}
return Py_True;
}
После 5000 итераций в цикле Python завершает работу с AppCrash.