Попеременная смена регистра букв в строке без учета пробелов и знаков препинания
Как поменять регистр букв в предложении с пробелами, чтобы эти пробелы не учитывались при очередной смене регистра.
Т. е. в моем случае из "ОдИн, ДвА, ТрИ." надо получить :"ОдИн, ДвА, тРи."
def to_weird_case(string):
num = 0
new_word = []
for i in string:
if num % 2 == 0:
num += 1
new_word.append(i.upper())
else:
num += 1
new_word.append(i.lower())
print(''.join(new_word))
to_weird_case(input())
Ответы (4 шт):
Автор решения: splash58
→ Ссылка
Поставьте явную проверку на пробел и сбрасывайте счетчик четности
def to_weird_case(string):
num = 0
new_word = []
for i in string:
if i == ' ':
num = 0
new_word.append(i)
elif num % 2 == 0:
num += 1
new_word.append(i.upper())
else:
num += 1
new_word.append(i.lower())
Автор решения: ganz
→ Ссылка
Применив телепатию, получил это
def to_weird_case(string):
num = 0
new_word = []
for i in string:
if i==' ': #если пробел то добавляем его в сроку и пропускаем цикл
new_word.append(' ')
continue
if num % 2 == 0:
num += 1
new_word.append(i.upper())
else:
num += 1
new_word.append(i.lower())
print(''.join(new_word))
to_weird_case('ОдИн, ДвА, ТрИ.')
#ОдИн, дВа, тРи.
Автор решения: Namerek
→ Ссылка
Если я правильно понял задачу,
Регистр каждой следующй БУКВЫ должен отличаться от регистра предыдущей
то могу предложить такое решение:
import re
string = 'один, два, три четыре пять шесть 098988 двенадцать'
indices = [i for i, let in enumerate(string.lower()) if re.match(r'[а-я]', let)]
print(''.join(string[x].lower() if x not in indices[::2] else string[x].upper() for x in range(len(string))))
# ОдИн, ДвА, тРи ЧеТыРе ПяТь ШеСтЬ 098988 дВеНаДцАтЬ
Без re можно так:
string = 'один, два, три четыре пять шесть 098988 двенадцать'
indices = [
i for i, let in enumerate(string.lower())
if let in 'абвгдеёжзиклмнопрстуфхцчшщьыъэюя'
]
print(
''.join(
string[x].lower() if x not in indices[::2] else string[x].upper()
for x in range(len(string))
)
)
# ОдИн, ДвА, тРи ЧеТыРе ПяТь ШеСтЬ 098988 дВеНаДцАтЬ
Автор решения: vadim vaduxa
→ Ссылка
поменять регистр букв в предложении с пробелами, в порядке индекса буквы в строке, но чтобы пробелы не учитывались при очередной смене регистра
stri = "ОдИн, ДвА, ТрИ."
from itertools import cycle
i = cycle([str.lower, str.upper] if stri.lstrip()[0].isupper() else [str.upper, str.lower])
a = ''.join(s if s in ' \t\n\r\v\f' else next(i)(s) for s in stri)
print(a) # оДиН, ДвА, ТрИ.
def to_weird_case(stri):
d = stri.lstrip()[0].isupper()
for s in stri:
if s in ' \t\n\r\v\f':
yield s
else:
yield s.lower() if d else s.upper()
d = not d
a = ''.join(to_weird_case(stri))
print(a) # оДиН, ДвА, ТрИ.