@overmind88
overmind88
24 Nov 2014

Видимо весьма тупой вопрос по петону:

a = 'aaaabbcaa'
for i in range(0,len(a)-1):
    print(a[i], end='')
aaaabbca

Почему не выводтся последний символ из строки?

24 Nov 2014

Orhideous, в ipython сейчас проверяю:
a = 'aaaabbcaa'
range(0,len(a)-1)
range(0, 8)

#ovqjcs/5 в ответ на /2
24 Nov 2014

overmind88, overmind88, ну и? range(0,8) на последней итерации даже в третьем питоне даст 7.

#ovqjcs/10 в ответ на /5
24 Nov 2014

«Вы всё ещё используете xrange()? Тогда мы идем к вам!»

#ovqjcs/4 в ответ на /3
24 Nov 2014

Я еще и u'' использую, да.

#ovqjcs/6 в ответ на /4
24 Nov 2014

А Армину не нравится, например.

#ovqjcs/9 в ответ на /8
24 Nov 2014

потому что -1 делаешь, когда надо плюс

24 Nov 2014

@caufman, не надо плюс

#ovqjcs/14 в ответ на /13
24 Nov 2014

а, да. Там же проход от нуля стоит. Просто у меня такая запись обычно идет сокращенно: range(len(x)), а ту форму записи использую, когда надо по произвольной последовательности пройти, типа range(1,len(x))

#ovqjcs/15 в ответ на /14
24 Nov 2014

я не конкретно про строки говорил. Вообще про коллекции

24 Nov 2014

@Umnik, потому что в итоге это будет вводимая строка любой длины, и мне надо будет проходится по всем символам строки последовательно сравнивая их.

24 Nov 2014

проход по любому списку/картежу

24 Nov 2014

Ок, разъясню, что я вообще делаю, я начал проходить курсы по 3-му петону, есть задание:

'''
Кодирование осуществляется следующим образом:
s = 'aaaabbсaa' преобразуется в 'a4b2с1a2', то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.

Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на стандартный вывод.

Sample Input 1:

aaaabbcaa

Sample Output 1:

a4b2c1a2

'''

Собственно сделать это надо втупую, без всяких батареек, с использованием только циклов, операций со строками и слайсами (без списков), в общенм какой-то паскаль прям получается.
Я планировал сделать примерно так: цикл по итому индексу проходится по строке (собственно именно для того, чтобы проходиться по индексу и беру len от строки) и если a[i] == a[i+1], то счётчик count , изначально равный единице увеличивается на 1, если нет, то счётчик равен единице, и, соответственно, выводится print(a[i], count) и вот где-то в этом моменте моя мысль ломается.

24 Nov 2014

Рабочий вариант решения:

s = input()
lastchar = s[0]
counter = 1
res = ""
for char in s[1:]:
if char == lastchar:
counter += 1
else:
res += "%c%i" % (lastchar, counter)
lastchar = char
counter = 1
res += "%c%i" % (lastchar, counter)
print(res)

#ovqjcs/24 в ответ на /22
24 Nov 2014

overmind88, я думал в третьем питоне "%" было окончательно выдавлено .format O_o

#ovqjcs/25 в ответ на /24

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.