Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2013 14:03:46

cyberbober
Зарегистрирован: 2013-05-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

Привет! Подскажите как можно выполнить следующее:
генерируем 16 значный номер randrange(1111111111111111,999999999999999)

по итогу мы получим следующее
xxxxxxxxxxxxxxx

Как при генерации получать комбинацию вида
xxxx-xxxx-xxxx-xxxx ?

Спасибо

Офлайн

#2 Май 24, 2013 15:37:31

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

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'

Офлайн

#3 Май 24, 2013 15:39:39

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

Не самый красивый и компактный,но простой способ:

>>> s='1111222233334444'
>>>r=[ ]
>>> for i in xrange(len(s)/4):                              
...     r.append(s[4*i:(i+1)*4])
>>> '-'.join(r)
'1111-2222-3333-4444'  
мне время спать, скоро подтянутся спецы по функиональному программированию и начнется война кодов в одну строчку:-) ну или я ошибаюсь



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Май 24, 2013 21:12:03

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

:)

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)

Офлайн

#5 Май 25, 2013 10:12:48

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

b'-'.join(struct.unpack('4s4s4s4s', str(1111222233334444).encode())).decode()

Офлайн

#6 Май 25, 2013 11:15:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

:)

b'-'.join(struct.unpack('4s'*4, str(1111222233334444).encode())).decode()



Офлайн

#7 Май 25, 2013 11:21:31

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

doza_and
Не, этот вариант рассматривался, но был признан ненаглядным и негибким. )

Офлайн

#8 Май 25, 2013 15:02:48

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?

ну и я тогда присоединюсь )

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'

Офлайн

#9 Май 26, 2013 11:01:29

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

randrange() с разделителем как сделать?

doza_and
re.sub("(....)(?=.)",r"\1-",s)
>>> import re
>>> 
>>> s = 'xxxxxxxxxxxxxxxx'
>>> re.sub(r'.{4}', r'\g<0>-', s, 3)
'xxxx-xxxx-xxxx-xxxx'
>>>



Офлайн

#10 Май 27, 2013 09:16:11

alekzp
Зарегистрирован: 2012-06-14
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

randrange() с разделителем как сделать?


>>> data
'111122223333444455556666'
>>> print("-".join([data[x:x+4] for x in range(0,len(data),4)]))
1111-2222-3333-4444-5555-6666
>>> 

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version