Форум сайта python.su
py.user.next
ну зто уже другой вопрос и другая функция будет.
имхо реализация int(str) в питоне кривая, если допускает нечисловые символы
можно так:
# s = '{9}:{21}:http:{6}:{7}:{4}:{5}::10.05:текст:{11}@{12}:{13}:qqq{{101}}D{{ФЫА{{{}}' def f(s): tmp = '' out = '' for i in s: tmp += i if i == '{' : out += tmp tmp = '' elif i == '}': t = tmp[:-1] if t.isdigit() : out += str(int(t) - 1) + '}' else : out += tmp tmp = '' out += tmp return out print 'in: ',s print 'out:',f(s)
Офлайн
857
vic57Не, это конструктор целочисленного объекта. Набери help(int), увидишь там всю инфу. Он умеет выполнять перевод из системы счисления по типу сишной strtol(). То есть понимает и двоичные с префиксом, и восьмеричные, и шестнадцатиричные.
имхо реализация int(str) в питоне кривая, если допускает нечисловые символы
>>> int('0xff', 16) 255 >>> >>> int('0b1010', 2) 10 >>>
vic57
можно так:
[guest@localhost bracenum]$ python -m doctest bracenum1.doct
**********************************************************************
File "bracenum1.doct", line 41, in bracenum1.doct
Failed example:
f('{00}')
Expected:
'{00}'
Got:
'{-1}'
**********************************************************************
File "bracenum1.doct", line 43, in bracenum1.doct
Failed example:
f('{01}')
Expected:
'{01}'
Got:
'{0}'
**********************************************************************
1 items had failures:
2 of 20 in bracenum1.doct
***Test Failed*** 2 failures.
[guest@localhost bracenum]$
Отредактировано py.user.next (Янв. 30, 2017 12:55:15)
Офлайн
таки да
>>> int('\n90') 90 >>> int('\n\t90') 90 >>> int('90 ') 90 >>> int(' 90 ') 90 >>>
Офлайн
py.user.nextтак в данном контексте ЕЯПП важно не форматирование строки, а значение числа.
Вот так можно {000000000000002} поставить и он просто сотрёт нули все.
Офлайн
857
vic57У него в условии ничего не сказано про такие числа, поэтому их надо оставлять нетронутыми. Это как с бесконечностью в математике: никто не знает, чему она равна, поэтому для неё придумали значок и просто его пишут. Но это не значит, что она ничему не равна. Просто неизвестно, чему она равна, поэтому прячут эту неизвестность за значком. Тут то же самое: неизвестно, что с ними делать, поэтому они оставляются неизменными. Тогда можно дописать дополнительную программу, которая сделает с ними что надо. А если же ты меняешь наугад, то портишь исходные данные и программу с точным преобразованием дописать не можешь уже.
так в данном контексте ЕЯПП важно не форматирование строки, а значение числа.
Отредактировано py.user.next (Янв. 30, 2017 16:31:27)
Офлайн
py.user.next
ну это дело ТС. какой он задал вопрос, такой получил ответ.пусть формулирует точнее
Офлайн
0
py.user.next
mo.group() - это вызов у объекта совпадения метода group() для получения всей строки, с которой совпало регулярное выражение. Метод group() у объекта совпадения может брать любые группы, которые совпали (типа mo.group(1, 2)), а просто group() равно group(0), где нулевая группа - это вся строка, которая совпала с регулярным выражением.
Аплодисменты, очень внятно все описали. Хотя, до этого я именно не понима о “group()”, остальное все понял. Спасибо.vic57вам тоже спасибо за ваш пример. работает
строку пропустили после цикла, ничего не портит
Отредактировано for_soul (Янв. 30, 2017 22:28:11)
Офлайн