Видимо весьма тупой вопрос по петону:
a = 'aaaabbcaa'
for i in range(0,len(a)-1):
print(a[i], end='')
aaaabbca
Почему не выводтся последний символ из строки?
Видимо весьма тупой вопрос по петону:
a = 'aaaabbcaa'
for i in range(0,len(a)-1):
print(a[i], end='')
aaaabbca
Почему не выводтся последний символ из строки?
overmind88, потому что -1?
// ваш КО
>>> range(0,len(a)-1)
[0, 1, 2, 3, 4, 5, 6, 7]
xrange(len(a))
потому что -1 делаешь, когда надо плюс
@caufman, не надо плюс
а, да. Там же проход от нуля стоит. Просто у меня такая запись обычно идет сокращенно: range(len(x))
, а ту форму записи использую, когда надо по произвольной последовательности пройти, типа range(1,len(x))
я не конкретно про строки говорил. Вообще про коллекции
@Umnik, потому что в итоге это будет вводимая строка любой длины, и мне надо будет проходится по всем символам строки последовательно сравнивая их.
проход по любому списку/картежу
Ок, разъясню, что я вообще делаю, я начал проходить курсы по 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) и вот где-то в этом моменте моя мысль ломается.
Рабочий вариант решения:
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)
overmind88, я думал в третьем питоне "%" было окончательно выдавлено .format O_o
vantro, в 3.4 точно работает
Orhideous, в ipython сейчас проверяю:
a = 'aaaabbcaa'
range(0,len(a)-1)
range(0, 8)
overmind88, overmind88, ну и? range(0,8) на последней итерации даже в третьем питоне даст 7.
Orhideous, в строке 9 символов а не 8