Форум сайта python.su
0
Условие:
(Повышенная сложность) Написать программу декодирования телефонного номера для АОН.
По запросу АОНа АТС посылает телефонный номер, используя следующие правила:
— Если цифра повторяется менее 2 раз, то это помеха и она должна быть отброшена
— Каждая значащая цифра повторяется минимум 2 раза
— Если в номере идут несколько цифр подряд, то для обозначения «такая же цифра как предыдущая» используется идущий 2 или более подряд раз знак #
Например, входящая строка 4434###552222311333661 соответствует номеру 4452136
Кстати, регулярные выражения использовать в этих заданиях — нельзя 
вот собственно что я наваял прошу не судить строго,
пишет Value error tel.remove(n) n not in list range
был на хабре вопрос его закрыли уже нельзя спросить , не дает покоя уже 3 день , в питоне опыта не много,
Спасибо.
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
Офлайн
7
Удаляешь из списка в то время, когда по нему лазаешь.
Вот, мой вариант:
import sys def get_number(string): number = '' for index in range(len(string)-1): if ((string[index] == string[index + 1] and string[index] != '#') or (string[index + 1] == '#' and string[index] != '#')): current_number = string[index] same = True else: if same: number += current_number same = False return number if __name__ == '__main__': string = sys.argv[1] number = get_number(string) print number
python tel.py 4434###552222311333661 4452136
Отредактировано Master_Sergius (Дек. 24, 2013 20:12:45)
Офлайн
75
data = raw_input('enter code: ') def clean(data): res = '' i = '' number = 0 for char in data: if char == i or char == "#": number +=1 else: if number >=2: res += i i = char return res print clean(data)
Отредактировано Singularity (Дек. 24, 2013 19:43:52)
Офлайн
75
Master_Sergius
я твое решение и решение ТС даже розпарсить не могу
Хочу увидеть пример решения данной задачи в функциональом стиле 
Офлайн
7
Ну да, более красиво получилось. Ничего, опыта поднаберу и всё будет пучком. Главное, что хоть задачи решаются. Кстати, как там моё ТЗ? Не пробовал? Но об этом уже в личку можно.
Офлайн
4
SingularityИзвените за критику, но Ваш код работает неполноценно, результат работы вашего кода соответствует: 4523136, а должен - 4452136.
Офлайн
75
Romiss
вторая попытка 
data = raw_input('enter code: ') def clean(data): res = '' i = '' number = 0 for char in data: if char == i or char == "#": number +=1 else: if number >0: res += i i = char number = 0 return res print clean(data)
Офлайн
Вот что я выдавил с наскоку
def filter_num(num): temp, res = [num[0]], [] for n in num[1:]: old = temp[-1] if old != n: if len(temp) > 1: if res and old == '#': res.append(res[-1]) else: res.append(old) temp = [n] else: temp.append(n) if len(temp) > 1: res.append(n) return ''.join(res) print(filter_num('32224#6665###9966##555'))
Офлайн
0
Спасибо, большое, просто задачка была в теме строки пытался обойтись циклами и списками, тоесть более простым вариантом, а тут много более сложных и интерсных вариантов, до этого с функций еще не разбирал спасибо буду учить.
Офлайн
0
Такой вопрос вообщем пошел всетаки я своим путем получилось в итоге два списка
tel=[] # тут отсеились все которые безпары сиволов или без # такого вида к примеру в 22223# te_l=[] # а тут те что нужно удалить из верхнего чтоб получить чистый к примеру 222#
aon = raw_input('enter code: ') tel =[] tel_l =[] 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 print tel
Офлайн