Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 30, 2017 12:44:14

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Уменьшить все числа в строке на 1

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)

Офлайн

#2 Янв. 30, 2017 12:50:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10019
Репутация: +  857  -
Профиль   Отправить e-mail  

Уменьшить все числа в строке на 1

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} поставить и он просто сотрёт нули все.



Отредактировано py.user.next (Янв. 30, 2017 12:55:15)

Офлайн

#3 Янв. 30, 2017 12:52:08

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Уменьшить все числа в строке на 1

таки да

 >>> int('\n90')
90
>>> int('\n\t90')
90
>>> int('90 ')
90
>>> int(' 90 ')
90
>>> 

Офлайн

#4 Янв. 30, 2017 13:30:33

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Уменьшить все числа в строке на 1

py.user.next
Вот так можно {000000000000002} поставить и он просто сотрёт нули все.
так в данном контексте ЕЯПП важно не форматирование строки, а значение числа.
в программировании есть 2 глюка:
1. программа не делает то, что мне надо
2. программа делает то, что мне не надо

Офлайн

#5 Янв. 30, 2017 16:30:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10019
Репутация: +  857  -
Профиль   Отправить e-mail  

Уменьшить все числа в строке на 1

vic57
так в данном контексте ЕЯПП важно не форматирование строки, а значение числа.
У него в условии ничего не сказано про такие числа, поэтому их надо оставлять нетронутыми. Это как с бесконечностью в математике: никто не знает, чему она равна, поэтому для неё придумали значок и просто его пишут. Но это не значит, что она ничему не равна. Просто неизвестно, чему она равна, поэтому прячут эту неизвестность за значком. Тут то же самое: неизвестно, что с ними делать, поэтому они оставляются неизменными. Тогда можно дописать дополнительную программу, которая сделает с ними что надо. А если же ты меняешь наугад, то портишь исходные данные и программу с точным преобразованием дописать не можешь уже.



Отредактировано py.user.next (Янв. 30, 2017 16:31:27)

Офлайн

#6 Янв. 30, 2017 16:47:28

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Уменьшить все числа в строке на 1

py.user.next
ну это дело ТС. какой он задал вопрос, такой получил ответ.пусть формулирует точнее

Офлайн

#7 Янв. 30, 2017 22:27:00

for_soul
Зарегистрирован: 2017-01-25
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Уменьшить все числа в строке на 1

py.user.next
mo.group() - это вызов у объекта совпадения метода group() для получения всей строки, с которой совпало регулярное выражение. Метод group() у объекта совпадения может брать любые группы, которые совпали (типа mo.group(1, 2)), а просто group() равно group(0), где нулевая группа - это вся строка, которая совпала с регулярным выражением.
Аплодисменты, очень внятно все описали. Хотя, до этого я именно не понима о “group()”, остальное все понял. Спасибо.

vic57
строку пропустили после цикла, ничего не портит
вам тоже спасибо за ваш пример. работает

Отредактировано for_soul (Янв. 30, 2017 22:28:11)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version