Почему не работает вывод слова "волной"?
def wave(people):
s=[]
for i in range(len(people)):
s.append(people.replace(people[i], chr(ord(people[i])-32)))
return s
print(wave('hello')
Вместо ожидаемого:
['Hello', 'hEllo', 'heLlo', 'helLo', 'hellO']
получаю:
['Hello', 'hEllo', 'heLLo', 'heLLo', 'hellO']
Ответы (3 шт):
def wave(w):
s=[]
for n in range(len(w)):
s.append(w[:n]+w[n].upper()+w[n+1:])
return s
print(wave('hello'))
или тоже самое
def wave(w):
return [w[:n]+w[n].upper()+w[n+1:] for n in range(len(w))]
print(wave('hello'))
['Hello', 'hEllo', 'heLlo', 'helLo', 'hellO']
str.replace()
Все l заменяются на L, если там было бы 3 L все бы заменились. Например:
print('helllllow'.replace('l','L'))
heLLLLLow
Вы не обработали крайний случай — одинаковые символы.
Это просто:
w = 'hellol'
print([w[:i] + w[i:].replace(c, c.upper(), 1) for i, c in enumerate(w)])
output:
(.venv) PS C:\KWORK>
['Hellol', 'hEllol', 'heLlol', 'helLol', 'hellOl', 'helloL']
Аргумент count
для метода replace
позволяет регулировать кол-во заменяемых символов.
Каждый раз заменяя people[i]
на people[i]-32
в подстроке people
вы заменяете все вхождения данного символа в этой строке.
Например доходя до буквы people[2]
(l
) вы заменяете все буквы l
в слове Hello
на L
получая HeLLo
, когда в вашем случае надо заменять только букву под индексом 2
Так же для получения заглавного варианта буквы будем использовать метод .upper()
def wave(people):
s=[]
for i in range(len(people)):
# Создаём новую строку:
# "{всё до символа i}{заглавный символ под i}{всё после символа i}"
newStr = f"{people[:i]}{people[i].upper()}{people[i+1:]}"
s.append(newStr)
return s
print(wave('hello'))
Ну и более сокращённый код вам уже предоставляли в других ответах