Как проще всего преобразовать строку в CaMeLcAsE?
На вход подается строка, на выходе должно быть та же строка, но в cAmElCaSe.
Пример:
ввод: Someword
вывод: sOmEwOrD
Я бы делал так
string = "Someword"
l=[]
count=0
for i in string:
count+=1
if count%2==0:
l.append(i.upper())
else:
l.append(i)
print("".join(l))
Есть ли вариант проще?
Ответы (3 шт):
Автор решения: Fedor March
→ Ссылка
Подскажу вариант с регулярными выражениями:
x = 'qwerty'
re.sub(r'(\b|\w)(\w)', lambda x: x.group(1).lower()+x.group(2).upper(), x)
'QwErTy'
Автор решения: Bol4onok
→ Ссылка
Можно вот так:
my_str = 'Someword'
print(''.join(ele.lower() if index % 2 == 0 else ele.upper() for index, ele in enumerate(my_str)))
Вывод
sOmEwOrD
Автор решения: TigerTV.ru
→ Ссылка
Можно так:
from itertools import zip_longest as zip_l
s = "ЯблокОs"
res = ''.join(map(''.join, zip_l(s[::2].upper(), s[1::2].lower(), fillvalue='')))
print(res) # ЯбЛоКоS
Либо через итераторы:
from itertools import zip_longest as zip_l
s = "ЯблокOs"
it = iter(s)
pairs = zip_l(map(str.upper, it), map(str.lower, it), fillvalue='')
res = ''.join(map(''.join, pairs))
print(res) # ЯбЛоКоS
Ну и теперь добавляем новое требование. Теперь преобразуется не только слово, но и строка:
from itertools import zip_longest as zip_l
def upperlower(word):
it = iter(word)
pairs = zip_l(map(str.upper, it), map(str.lower, it), fillvalue='')
return ''.join(map(''.join, pairs))
def uplow_str(s):
return ' '.join(map(upperlower, s.split()))
s = "I like The ЯблокOs and i don't like Spaces"
res = uplow_str(s)
print(res) # I LiKe ThE ЯбЛоКoS AnD I DoN'T LiKe SpAcEs