2015-08-17 2 views
-1

У меня есть скрипт python для проверки пользователя онлайн или офлайн, но у меня проблемы.Как сделать split() путем подсчета числа неизвестных len() в python

useron=u', '.join(useron) 
useroff=u', '.join(useroff) 
if useron: 
    repon+=u'ONLINE\nUser: '+useron+u'.' 
if useroff: 
    repoff+=u'OFFLINE\nUser: '+useroff+u'.' 
reply(type, source, repon) 
reply(type, source, repoff) 

Проблема в том, что я не могу быть уверен, сколько пользователи и выключаться в то время как максимальный предел каждый раз, когда отправка сообщений только 150 символов букв, я пытаюсь разделить() с подсчитывать количество Len () в сообщении, но всегда сбой.

Я хочу попробовать, если в первом сообщении количество букв превышает 150 символов, тогда остальные сообщения будут продолжены во втором сообщении, а затем в третьем сообщении и следующем сообщении.

+1

вы вопрос немного неясно, можете ли вы объяснить, что именно вы пытаясь разделить и считать 'len()' for, пример ввода/вывода для вашей программы был бы полезен. –

+0

Я пытаюсь разделить repon и repoff, если более 150 символов букв. – nameless

+1

Можете ли вы предоставить образец ввода и вывода ..? и желаемый выход тоже? –

ответ

0

Если вы хотите разбить строку на основе длины, то вы должны использовать subscript (индексирование), а не str.split().

Пример -

useron=u', '.join(useron) 
useroff=u', '.join(useroff) 
if useron: 
    repon+=u'ONLINE\nUser: '+useron+u'.' 
if useroff: 
    repoff+=u'OFFLINE\nUser: '+useroff+u'.' 
for i in range(0,len(repon),150): 
    reply(type, source, repon[i:i+150]) 
for i in range(0,len(repoff),150): 
    reply(type, source, repoff[i:i+150]) 

Пример/Demo (для печати в блоках 5 для простоты) -

>>> s = "abcdefghijklm" 
>>> for i in range(0,len(s),5): 
...  print(s[i:i+5]) 
... 
abcde 
fghij 
klm 
+0

братом, благодаря ответу, я буду попробуйте, ваши советы, смотрящие на успех. – nameless

1

Если я правильно понимаю вашу проблему правильно - вы можете только отправить максимум из 150 символов в каждой команде; и вы хотите, чтобы вы правильно разделили команды, чтобы не нарушать пределы символов, а команды имеют смысл.

Для этого вам нужно быть немного умным в том, как вы организуете свои команды. Храните команду вместе с длиной в списке, а затем отсортировать список, а затем разделить его на куски, где длина закрывается до 150.

Попробуйте это:

login = [] 
logout = [] 

for user in online_userlist: 
    cmd = u'ONLINE\nUser: {}'.format(user) 
    login.append((len(cmd), cmd)) 

for user in offline_userlist: 
    cmd = u'OFFLINE\nUser: {}'.format(user) 
    logout.append((len(cmd), cmd)) 

Теперь вы хотите отправить команды в даже куски 150 символов вот один из способов сделать это (подсказка: вы можете увидеть, если вы можете оптимизировать его?):

command = '' 
for length, cmd in logout: 
    if len(command) + length < 150: 
    command += cmd 
    else: 
    reply(type, source, repon) 
    command = '' 
Смежные вопросы