Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Помогите решить задачу: Отсортировать текст не использую строковіе функции! [RSS Feed]

#1 Окт. 11, 2014 17:43:34

AlexBudyansk
Зарегистрирован: 2014-10-11
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

Дан текст (список символов), содержащий в себе буквы, цифры, другие символы. Преобразовать текст, отсортировав каждую группу подряд идущих букв по алфавиту, каждую группу подряд идущих цифр в порядке убывания. Например: «cba1076 /’abfc3785,’’3946f» - «abc7610 /’abcf8753,’’9643f» . Не использовать строковые функции

Офлайн

#2 Окт. 13, 2014 16:24:17

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

а re можно использовать?

>>> import re
>>> def my_sort(group):
...         if re.match("\d+", group):
...                 return "".join(sorted(group, reverse=True))
...         elif re.match("\w+", group):
...                 return "".join(sorted(group))
...         else:
...                 return group
... 
>>>
>>> s="cba1076 /’abfc3785,’’3946f"
>>> groups=re.split(r'(\d+|\W+)',s)
>>> print "".join(map(my_sort, groups))
abc7610 /abcf8753,’’9643f
>>> 



Отредактировано Nata (Окт. 13, 2014 16:35:15)

Офлайн

#3 Окт. 14, 2014 02:53:00

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

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

#!/usr/bin/env python3
 
import string
 
def f(s):
    out = ''
    letters = set(string.ascii_letters)
    digits = set(string.digits)
    t = 0
    word = ''
    it = iter(s)
    while True:
        c = next(it, None)
        if t == 0:
            if c in letters:
                word += c
                t = 1
            elif c in digits:
                word += c
                t = 2
            else:
                if c:
                    out += c
        elif t == 1:
            if c in letters:
                word += c
            else:
                out += ''.join(sorted(word))
                word = ''
                if c in digits:
                    word += c
                    t = 2
                else:
                    if c:
                        out += c
                    t = 0
        else:
            if c in digits:
                word += c
            else:
                out += ''.join(sorted(word, reverse=True))
                word = ''
                if c in letters:
                    word += c
                    t = 1
                else:
                    if c:
                        out += c
                    t = 0
        if c is None:
            break
    return out

#!/usr/bin/env python3
 
import string
 
def f(s):
    out = ''
    letters = set(string.ascii_letters)
    digits = set(string.digits)
    t, word = 0, ''
    it = iter(s)
    while True:
        c = next(it, None)
        if c in letters:
            if t == 2:
                out += ''.join(sorted(word, reverse=True))
                word = ''
            word += c
            t = 1
        elif c in digits:
            if t == 1:
                out += ''.join(sorted(word))
                word = ''
            word += c
            t = 2
        else:
            if t == 1:
                out += ''.join(sorted(word))
            elif t == 2:
                out += ''.join(sorted(word, reverse=True))
            if c:
                out += c
            word = ''
            t = 0
        if c is None:
            break
    return out



Отредактировано py.user.next (Окт. 14, 2014 06:50:24)

Офлайн

#4 Окт. 14, 2014 08:01:05

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

''.join строковой метод

Офлайн

#5 Окт. 14, 2014 08:38:09

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

dimy44
''.join строковой метод
>>> def join(li):
...         s=""
...         for el in li:
...                 s+=el
...         return s
>>>
return join(sorted(group, reverse=True))
>>> print join(map(my_sort, groups))
abc7610 /abcf8753,’’9643f
>>> 



Офлайн

#6 Окт. 14, 2014 08:38:14

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

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

dimy44
''.join строковой метод
Печалька.
>>> out = ''
>>> for i in ['a', 'b', 'c']:
...     out += i
... 
>>> out
'abc'
>>>


Ещё один добавлю:
#!/usr/bin/env python3
 
import re
import string
 
def tr(m):
    s = m.group()
    if set(s) & set(string.digits):
        lst = sorted(s, reverse=True)
    else:
        lst = sorted(s)
    out = ''
    for i in lst:
        out += i
    return out
 
def f(s):
    return re.sub(r'\d+|[a-zA-Z]+', tr, s)



Отредактировано py.user.next (Окт. 14, 2014 09:03:29)

Офлайн

#7 Окт. 14, 2014 09:48:54

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

py.user.next
 if set(s) & set(string.digits):
py.user.next
 return re.sub(r'\d+|[a-zA-Z]+', tr, s)
nice! :D :D



Офлайн

#8 Окт. 14, 2014 10:18:30

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

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

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



Офлайн

#9 Окт. 19, 2014 12:56:07

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Помогите решить задачу: Отсортировать текст не использую строковіе функции!

s = """cba1076 /’abfc3785,’’3946f"""
for w,d,m in re.findall( '([a-zA-Z]+)|(\d+)|(\W+)', s ):
    print(*( sorted(w)+sorted(d,reverse=True)+[k for k in m]), sep = '', end = '')
abc7610 /abcf8753,’’9643f
>>>




Отредактировано Isem (Окт. 19, 2014 13:08:18)

Офлайн

  • Начало
  • » Центр помощи
  • » Помогите решить задачу: Отсортировать текст не использую строковіе функции![RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version