Чтобы избежать использования исключений и для решения на основе типа, я пришел к следующему:
#! /usr/bin/python3
import itertools
def p2Sort(x):
notImpl = type(0j.__gt__(0j))
it = iter(x)
first = next(it)
groups = [[first]]
types = {type(first):0}
for item in it:
item_type = type(item)
if item_type in types.keys():
groups[types[item_type]].append(item)
else:
types[item_type] = len(types)
groups.append([item])
#debuggng
for group in groups:
print(group)
for it in group:
print(type(it),)
#
for i in range(len(groups)):
if type(groups[i][0].__gt__(groups[i][0])) == notImpl:
continue
groups[i] = sorted(groups[i])
return itertools.chain.from_iterable(group for group in groups)
x = [0j, 'one', 2.3, 'four', -5, 3j, 0j, -5.5, 13 , 15.3, 'aa', 'zz']
print(list(p2Sort(x)))
Обратите внимание, что дополнительный словарь для хранения различных типов в списке и переменной типа (notImpl). Обратите внимание, что float и int не смешиваются здесь.
Выход:
================================================================================
05.04.2017 18:27:57
~/Desktop/sorter.py
--------------------------------------------------------------------------------
[0j, 3j, 0j]
<class 'complex'>
<class 'complex'>
<class 'complex'>
['one', 'four', 'aa', 'zz']
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
[2.3, -5.5, 15.3]
<class 'float'>
<class 'float'>
<class 'float'>
[-5, 13]
<class 'int'>
<class 'int'>
[0j, 3j, 0j, 'aa', 'four', 'one', 'zz', -5.5, 2.3, 15.3, -5, 13]
Это зависит, что Вы подразумеваете под перепрошивкой. В простом случае необходимо быть в состоянии видеть, установлен ли Cydia, и пойдите тем - что-то как
NSString *filePath = @"/Applications/Cydia.app";
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
// do something useful
}
Для взломанных ядер, это - немного более включенная (партия).
Я предложил бы искать файлы, которые не присутствуют на "ванили" iPhone. Все наборы перепрошивки я видел установку ssh. Это могло бы быть хорошим индикатором взломанного телефона.
Проверка того, сломано ли ядро, не ТАКОЕ сложная задача.
При взломе выполняется проверка подписи ядра подписанного кода. всегда сообщать, что код подписан правильно, на неразрушенных телефонах нельзя запускать код с плохой подписью.
Итак, включите в приложение отдельный исполняемый файл с плохой подписью. Это может быть просто 3-строчная программа с main () и возвращаемым значением. Скомпилируйте исполняемый файл без подписи кода (отключите его в Настройках проекта-> Сборка) и подпишите его другим ключом с помощью утилиты командной строки «codeign».
Пусть ваше приложение запускает отдельный исполняемый файл. Если ваша программа не может получить возвращаемое значение при запуске отдельного исполняемого файла с плохим сигналом, она определенно заключена в тюрьму. Если отдельный исполняемый файл возвращает A-OK,