Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Задача по Python для начинающих с циклами и списками / 15 сообщений из 15, страница 1 из 1
24.12.2013, 20:30
    #38511493
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
Условие:
(Повышенная сложность) Написать программу декодирования телефонного номера для АОН.
По запросу АОНа АТС посылает телефонный номер, используя следующие правила:
— Если цифра повторяется менее 2 раз, то это помеха и она должна быть отброшена
— Каждая значащая цифра повторяется минимум 2 раза
— Если в номере идут несколько цифр подряд, то для обозначения «такая же цифра как предыдущая» используется идущий 2 или более подряд раз знак #

Например, входящая строка 4434###552222311333661 соответствует номеру 4452136
Кстати, регулярные выражения использовать в этих заданиях — нельзя :)

вот собственно что я наваял прошу не судить строго,
пишет Value error tel.remove(n) n not in list range
был на хабре вопрос его закрыли уже нельзя спросить , не дает покоя уже 3 день , в питоне опыта не много,
Спасибо.
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
aon = raw_input('enter code: ')
tel =[]
range1 = len(aon)

range1 = range1-1
n=0
for int in aon:
    if n < range1:
        n=n+1
        if aon[n-1] == aon[n]:

            tel.append(aon[n-1])
        elif aon[n]== '#':
            #aon[n-1] = aon[n-1]+'#'
            tel.append(aon[n-1])
            tel.append(aon[n])
range2 = len(tel)
range2 = range2-1

print tel
n=0
for int2 in tel:
    if n<range2:
        n=n+1
        if tel[n-1]==tel[n] and tel[n+1]!='#':
            tel.remove(n)
        elif tel[n]!='#':
            tel.remove(n)
print tel            
...
Рейтинг: 0 / 0
24.12.2013, 21:13
    #38511526
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
как-то много телодвижений )) Не такая уж сложная задача... я ведь тоже не профи (новичёк, учил может с недельку питон... не срослось, появилась идея интереснее)...
Итак:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#!/usr/local/bin/python2.7
    
aon = raw_input('enter code: ')
res = ''
tel = ''
last_sym = ''
#убираю повторы и отсеиваю помехи
for sym in aon:
  if (last_sym==sym and (len(res)==0 or res[-1]!=sym)):
    res += sym
  last_sym=sym
  
#заменяю решётки на предшествующие им символы
for sym in res:
  if (sym!='#'):
    tel += sym
  else:
    tel += last_sym
  last_sym = sym
  
print tel
...
Рейтинг: 0 / 0
24.12.2013, 23:35
    #38511612
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
ПрограмёрИтак:
Код: python
1.
2.
3.
4.
5.
#убираю повторы и отсеиваю помехи
for sym in aon:
  if (last_sym==sym and (len(res)==0 or res[-1]!=sym)):
    res += sym
  last_sym=sym


спасибо за ответ
не совсем понял этот момент и еще ваш вариант не выводит символы после которых #
...
Рейтинг: 0 / 0
25.12.2013, 00:03
    #38511622
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
Кстати, а можно и извратиться

Код: python
1.
2.
3.
4.
5.
6.
7.
#!/usr/local/bin/python2.7
    
aon = raw_input('enter code: ')
tel = [aon[num] for num in range(len(aon)-1) if (num==0 or aon[num-1]!=aon[num]) and aon[num]==aon[num+1]]
res = ''.join([(tel[num] if tel[num]!='#' else tel[num-1]) for num in range(len(tel))])

print res
...
Рейтинг: 0 / 0
25.12.2013, 00:11
    #38511628
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
LamerO4ekПрограмёрИтак:
Код: python
1.
2.
3.
4.
5.
#убираю повторы и отсеиваю помехи
for sym in aon:
  if (last_sym==sym and (len(res)==0 or res[-1]!=sym)):
    res += sym
  last_sym=sym


спасибо за ответ
не совсем понял этот момент и еще ваш вариант не выводит символы после которых #

а что не поняли?

логика такая:
если два одинаковых символа идут подряд - значит не помеха. А всё, что не помехи (last_sym==sym) и не повторы (res[-1]!=sym) - пишем в результат. а len(res)==0 там написано для того, что бы при нулевой длине результата не получать ошибку обращения к несуществующему элементу.
...
Рейтинг: 0 / 0
25.12.2013, 00:33
    #38511640
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
вобщем извращался и до извращался до такого
есть два ссписка

Код: python
1.
2.
3.
# пример
tel=[2,2,2,2,3,#]  # тут отсеились все которые безпары сиволов или без # такого вида к примеру в 22223#
te_l=[2,2,2,#] # а тут те что нужно удалить из верхнего чтоб получить чистый к примеру 222#



отнять от верхнего списка нижний чтобы получилось
[2,3]

весь мой код вот такое безобразие

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
aon = raw_input('enter code: ')
tel =[]
tel_l =[]
number = ''
range1 = len(aon)
range1 = range1-1
n=0
for int in aon:
    if n < range1:
        n=n+1
        if aon[n-1] == aon[n]:
            tel.append(aon[n-1])
        elif aon[n]== '#':
            #aon[n-1] = aon[n-1]+'#'
            tel.append(aon[n-1])
            tel.append(aon[n])
range2 = len(tel)
range2 = range2-1
print tel
n=0
for int2 in tel:
    if n<range2:
        n=n+1
        if tel[n-1]==tel[n] and tel[n+1]!='#':
            
            tel_l.append(tel[n])
        elif tel[n]=='#':
           
            tel_l.append(tel[n])
           
print tel_l            
 
 
...
Рейтинг: 0 / 0
25.12.2013, 00:35
    #38511641
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
LamerO4ekвобщем извращался и до извращался до такого
есть два ссписка

Код: python
1.
2.
3.
# пример
tel=[2,2,2,2,3,#]  # тут отсеились все которые безпары сиволов или без # такого вида к примеру в 22223#
te_l=[2,2,2,#] # а тут те что нужно удалить из верхнего чтоб получить чистый к примеру 222#



отнять от верхнего списка нижний чтобы получилось
[2,3]

весь мой код вот такое безобразие

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
aon = raw_input('enter code: ')
tel =[]
tel_l =[]
number = ''
range1 = len(aon)
range1 = range1-1
n=0
for int in aon:
    if n < range1:
        n=n+1
        if aon[n-1] == aon[n]:
            tel.append(aon[n-1])
        elif aon[n]== '#':
            #aon[n-1] = aon[n-1]+'#'
            tel.append(aon[n-1])
            tel.append(aon[n])
range2 = len(tel)
range2 = range2-1
print tel
n=0
for int2 in tel:
    if n<range2:
        n=n+1
        if tel[n-1]==tel[n] and tel[n+1]!='#':
            
            tel_l.append(tel[n])
        elif tel[n]=='#':
           
            tel_l.append(tel[n])
           
print tel_l            
 
 



хотел бы узнать как это отнимание провернуть со списками =)
спасибо за ответы
...
Рейтинг: 0 / 0
25.12.2013, 00:46
    #38511647
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
LamerO4ek,

Зачем так сложно? я же показал варианты полегче (вон даже в 3 строки есть, на любителя... мне это в питоне нравится, кодинг в разы ускоряет) :)

Кстати, в своём варианте указанной ошибки не нашёл, напишите пожалуйста что вводили, и что ожидали получить в ответ :)
...
Рейтинг: 0 / 0
25.12.2013, 01:21
    #38511665
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
ПрограмёрLamerO4ek,

Зачем так сложно? я же показал варианты полегче (вон даже в 3 строки есть, на любителя... мне это в питоне нравится, кодинг в разы ускоряет) :)

Кстати, в своём варианте указанной ошибки не нашёл, напишите пожалуйста что вводили, и что ожидали получить в ответ :)

пробывал любой Ваш вариант, цифры после которых # не запоминает, запоминает только цифры с повторами
к примеру 1#4#55667
выводит 56
...
Рейтинг: 0 / 0
25.12.2013, 01:29
    #38511668
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
LamerO4ekПрограмёрLamerO4ek,

Зачем так сложно? я же показал варианты полегче (вон даже в 3 строки есть, на любителя... мне это в питоне нравится, кодинг в разы ускоряет) :)

Кстати, в своём варианте указанной ошибки не нашёл, напишите пожалуйста что вводили, и что ожидали получить в ответ :)

пробывал любой Ваш вариант, цифры после которых # не запоминает, запоминает только цифры с повторами
к примеру 1#4#55667
выводит 56

Но ведь всё правильно )) По условию задачи так и должно быть... То есть посимвольно:
1 - помеха (не повторяется)
# - помеха (не повторяется)
4 - помеха (не повторяется)
# - помеха (не повторяется)
55 - цифра 5
66 - цифра 6
7 - помеха (не повторяется)
...
Рейтинг: 0 / 0
25.12.2013, 01:47
    #38511676
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
Програмёр,

прошу прощения это я не правильно вьехал в условие
...
Рейтинг: 0 / 0
25.12.2013, 02:33
    #38511683
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
LamerO4ekПрограмёр,

прошу прощения это я не правильно вьехал в условие

Бывает. Главное разобрались :)
...
Рейтинг: 0 / 0
25.12.2013, 21:05
    #38512527
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#!/usr/local/bin/python2.7
    
aon = raw_input('enter code: ')
res = ''
tel = ''
last_sym = ''
#убираю повторы и отсеиваю помехи
for sym in aon:
  if (last_sym==sym and (len(res)==0 or res[-1]!=sym)):
    res += sym
  last_sym=sym
  
#заменяю решётки на предшествующие им символы
for sym in res:
  if (sym!='#'):
    tel += sym
  else:
    tel += last_sym
  last_sym = sym
  
print tel

[/quot]


Вы не могли бы пожалуйста, пошагово расписать логику в коде, все равно до конца не разобрался.
Спасибо
...
Рейтинг: 0 / 0
25.12.2013, 21:30
    #38512546
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
LamerO4ek,

а что именно вызывает затруднения?
...
Рейтинг: 0 / 0
28.12.2013, 02:07
    #38514862
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по Python для начинающих с циклами и списками
разобрался) спасибо за помощь.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Задача по Python для начинающих с циклами и списками / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]