Форум сайта python.su
Привет! Подскажите как можно выполнить следующее:
генерируем 16 значный номер randrange(1111111111111111,999999999999999)
по итогу мы получим следующее
xxxxxxxxxxxxxxx
Как при генерации получать комбинацию вида
xxxx-xxxx-xxxx-xxxx ?
Спасибо
Офлайн
In [1]: a = 'xxxxxxxxxxxxxxx' In [2]: b = [a[i:i+4] for i in xrange(0, 4)] In [3]: b Out[3]: ['xxxx', 'xxxx', 'xxxx', 'xxxx'] In [4]: c = '-'.join(b) In [5]: c Out[5]: 'xxxx-xxxx-xxxx-xxxx'
Офлайн
Не самый красивый и компактный,но простой способ:
>>> s='1111222233334444' >>>r=[ ] >>> for i in xrange(len(s)/4): ... r.append(s[4*i:(i+1)*4]) >>> '-'.join(r) '1111-2222-3333-4444'
Офлайн
:)
JOHN_16
спецы по функциональному программированию
re.sub("(....)(?=.)",r"\1-",s)
"-".join([str(i.data) for i in np.frombuffer(s,dtype='i')])
Отредактировано doza_and (Май 24, 2013 21:20:33)
Офлайн
b'-'.join(struct.unpack('4s4s4s4s', str(1111222233334444).encode())).decode()
Офлайн
:)
b'-'.join(struct.unpack('4s'*4, str(1111222233334444).encode())).decode()
Офлайн
doza_andНе, этот вариант рассматривался, но был признан ненаглядным и негибким. )
Офлайн
ну и я тогда присоединюсь )
n = 1111222233334444 def split(n): q, r = divmod(n, 10000) return '{}-{}'.format(split(q), r) if q else r split(n) Out[3]: '1111-2222-3333-4444' from textwrap import wrap '-'.join(wrap(str(n),4)) Out[5]: '1111-2222-3333-4444'
Офлайн
doza_andre.sub("(....)(?=.)",r"\1-",s)
>>> import re >>> >>> s = 'xxxxxxxxxxxxxxxx' >>> re.sub(r'.{4}', r'\g<0>-', s, 3) 'xxxx-xxxx-xxxx-xxxx' >>>
Офлайн
>>> data '111122223333444455556666' >>> print("-".join([data[x:x+4] for x in range(0,len(data),4)])) 1111-2222-3333-4444-5555-6666 >>>
Офлайн