[#] Строки
vit01(mira, 1) — All
2015-12-04 04:13:39


Допустим, дана строка слов, разделенных пробелами. Необходимо найти в ней
самое длинное слово и заменить в нем буквы 'a' на буквы 'b'.
Сразу следует оговорить, что в отличие, скажем от Pascal, в Python строки
неизменяемы. Т.е. в Питоне изменить символы в строке в принципе нельзя.
Поэтому есть только один выход: сформировать новую измененую строку, или
просто заменять определенные символы при выводе их на экран. Выберем первый
путь.
Сформировать новую строку также можно двумя способами (как минимум):
* преобразовать исходную в список, выполнить в нем замену, а затем элементы списка соединить в новую строку,
* вырезать из первой строки все символы до самого длинного слова, посимвольно добавить к ней изменяемое длинное слово, досоединить остаток первой строки.
Логически первый способ проще.
Сам алгоритм поиска самого длинного слова выгляд так:
1. Если очередной символ не пробел, то увеличиваем счетчик букв слова.
2. Если все же пробел, то проверяем не самое ли это длинное на данный момент слов. Если это так, то запоминаем длину этого слова (max_w) и индекс начала слова (id_w).
3. Поскольку последнее слово могло быть не проверено в цикле, то делаем еще одну проверку длины слова за пределами цикла.
При замене букв символы слова перебираются, и если встретиться "нужная" буква,
то вместо нее записывается другая.
    s = input()
    s = list(s) # преобразуем в список
    l = len(s)
    max_w = 0
    id_w = 0
    count = 0
    i = 0
    while i < l:
    	if s[i] != ' ':
    		count += 1
    	else:
    		if count > max_w:
    			max_w = count
    			id_w = i - count
    		count = 0
    	i += 1
    if count > max_w: # проверяем последнее слово
    	max_w = count
    	id_w = i - count
    id_w_end = id_w + max_w
    while id_w < id_w_end:
    	if s[id_w] == 'a':
    		s[id_w] = 'b'
    	id_w += 1
    s1 = ''
    for i in s:
    	s1 += i	
    print(s1)
Второй способ - через срезы. Здесь не надо в начале программы преобразовывать
строку к списку.
    # часть кода - только замена символов
    s1 = s[0:id_w]
    id_w_end = id_w + max_w
    while id_w < id_w_end:
    	if s[id_w] == 'a':
    		s1 += 'b'
    	else:
    		s1 += s[id_w]
    	id_w += 1
    s1 += s[id_w:]
    print(s1)
Пример выполнения кода:
    very many variants and variables
    very many variants and vbribbles