Python. upper в цикле for делает одинаковые соседние буквы большими
В общем нужно каждую букву заданного слова сделать большой.Но почему то когда дело доходит до 2х рядом стоящих одинаковых букв, они обе становятся большими.Почему так происходит и как от этого избавится? 'HeLLo', 'HeLLo' => 'HeLlo', 'HelLo'
def wave(people):
count = 0
c = []
for i in range(len(people)):
c.append(people.replace(people[count],(people[count].upper())))
count += 1
return c
print(wave('Hello'))
['Hello', 'HEllo', 'HeLLo', 'HeLLo', 'HellO']
Ответы (2 шт):
Это и не для рядом стоящих так будет.
Происходит это потому, что вы в replace(people[count],(people[count].upper())) даёте команду заменить все буквы 'l' (чему соответствует и people[2] и people[3]) на L.
Исправить предложил бы так - используя индексы:
def wave(people):
c = []
for i in range(len(people)):
c.append(people[:i] + people[i].upper() + people[i+1:])
return c
print(wave('Hello')) # Правильно: ['Hello', 'HEllo', 'HeLlo', 'HelLo', 'HellO']
Обратите внимание, что я убрал совершенно лишний count - у вас же итератор есть. Это в While подобный count был бы нужен.
Это для визуализации, если интересно будет.
import time
word = 'hello'
for _ in range(3):
print(word, end='')
time.sleep(1)
print('\b' * len(word), end='')
for i in range(len(word)):
print(word[:i] + word[i:].capitalize(), end='')
time.sleep(1)
print('\b' * len(word), end='')
print(word)
что до решения Вашей задачи то:
word = 'hello'
wlist = [word[:i] + word[i:].capitalize() for i in range(len(word))]
# ['Hello', 'hEllo', 'heLlo', 'helLo', 'hellO']