Как правильно указывают другие ответы, проблема заключается в сравнениях с плавающей запятой. Десятые не имеют конечных двоичных представлений, если их не пять.
Поскольку вас интересует очень конкретный набор чисел, вы можете сопоставить их с целыми числами вместо использования сравнения round
, isclose
или abs
. Таким образом, вы можете сделать сравнение точным, а затем сопоставить результаты с нужными числами.
В этом случае вы можете умножить все на 10, чтобы получить целые числа. В более сложных случаях вам могут понадобиться другие факторы, совершенно другая функция преобразования или даже таблица поиска.
number = range(1, 10)
comb = (tuple(x / 10 for x in c) for c in itertools.product(number, repeat=5) if sum(c) == 10)
for cb in comp:
print(cb)
Пара других мелких улучшений:
sum
, чтобы сложить элементы вместе, вместо того, чтобы выписывать их вручную. Это значительно упростит добавление большего количества элементов к сумме. comb
в качестве генератора, а не превращайте его в перегруженный список памяти, если вам не нужно обращаться к нему несколько раз. Этот код работает на меня (mirc 6.31):
IntPtr mainHandle = FindWindow("mIRC", null);
IntPtr serverHandle = FindWindowEx(mainHandle, new IntPtr(0), "MDIClient", null);
IntPtr chanHandle = FindWindowEx(serverHandle, new IntPtr(0), "mIRC_Channel", null);
IntPtr editHandle = FindWindowEx(chanHandle, new IntPtr(0), "richEdit20A", null);
SendMessage(editHandle, 0x000C, 0, "Hello World");
Заметьте измененный класс окна (richedit20A вместо редактирования). Просто найденный корректным классом при помощи Шпиона ++.
Что касается дескрипторов окна, одна возможность состоит в том, чтобы использовать EnumWindows или EnumChildWindows API.