Найти - Пользователи
Полная версия: Уменьшить все числа в строке на 1
Начало » Python для новичков » Уменьшить все числа в строке на 1
1 2
vic57
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)
py.user.next
vic57
имхо реализация int(str) в питоне кривая, если допускает нечисловые символы
Не, это конструктор целочисленного объекта. Набери help(int), увидишь там всю инфу. Он умеет выполнять перевод из системы счисления по типу сишной strtol(). То есть понимает и двоичные с префиксом, и восьмеричные, и шестнадцатиричные.
  
>>> 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]$
Вот так можно {000000000000002} поставить и он просто сотрёт нули все.
vic57
таки да
 >>> int('\n90')
90
>>> int('\n\t90')
90
>>> int('90 ')
90
>>> int(' 90 ')
90
>>> 
vic57
py.user.next
Вот так можно {000000000000002} поставить и он просто сотрёт нули все.
так в данном контексте ЕЯПП важно не форматирование строки, а значение числа.
в программировании есть 2 глюка:
1. программа не делает то, что мне надо
2. программа делает то, что мне не надо
py.user.next
vic57
так в данном контексте ЕЯПП важно не форматирование строки, а значение числа.
У него в условии ничего не сказано про такие числа, поэтому их надо оставлять нетронутыми. Это как с бесконечностью в математике: никто не знает, чему она равна, поэтому для неё придумали значок и просто его пишут. Но это не значит, что она ничему не равна. Просто неизвестно, чему она равна, поэтому прячут эту неизвестность за значком. Тут то же самое: неизвестно, что с ними делать, поэтому они оставляются неизменными. Тогда можно дописать дополнительную программу, которая сделает с ними что надо. А если же ты меняешь наугад, то портишь исходные данные и программу с точным преобразованием дописать не можешь уже.
vic57
py.user.next
ну это дело ТС. какой он задал вопрос, такой получил ответ.пусть формулирует точнее
for_soul
py.user.next
mo.group() - это вызов у объекта совпадения метода group() для получения всей строки, с которой совпало регулярное выражение. Метод group() у объекта совпадения может брать любые группы, которые совпали (типа mo.group(1, 2)), а просто group() равно group(0), где нулевая группа - это вся строка, которая совпала с регулярным выражением.
Аплодисменты, очень внятно все описали. Хотя, до этого я именно не понима о “group()”, остальное все понял. Спасибо.

vic57
строку пропустили после цикла, ничего не портит
вам тоже спасибо за ваш пример. работает
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB