Вывод строки "заборчиком" в python

Необходимо вывести строку таким образом, чтобы каждая вторая буква была заглавной. Пробовал использование среза и метода upper(), но получилось вывести только заглавные буквы.

text = input()
print(text[0:len(text):2].upper())

Ответы (3 шт):

Автор решения: AbssDuo
import re

text = input('Введите текст: ')
zabor = re.sub(r'(\b|\w)(\w)', lambda x: x.group(1).lower()+x.group(2).upper(), text)
print(zabor)
→ Ссылка
Автор решения: Antonio Logvinenkas

Например, так:

text = input()
count = [i for i in range(len(text))]
print(''.join(text[i].upper() if (i % 2 != 0) else text[i] for i in count))
→ Ссылка
Автор решения: g0rgol

Дело в том, что командой print(text[0:len(text):2].upper()) вы пытаетесь вывести срез строки, состоящий из каждого второго символа исходной строки, к которому применён метод upper(). Поэтому и выводится только каждый второй символ (заглавный из-за upper()).

Можно пойти несколькими путями:

Во-первых, самый банальный, при помощи цикла for:

text = input()

for i in range(len(text)):
    if i % 2 == 0:
        print(text[i].upper(), end="")
    else:
        print(text[i], end="")

Во-вторых чуть более хитрый при помощи генератора-списка, в котором стоит условие, что i-й символ объекта, возвращаемого генератором (то бишь i-й символ исходной строки text) либо остаётся неизменным, либо его регистр становится верхним.

text = input()

new_text = "".join([text[i].upper() if i % 2 == 0 else text[i] for i in range(len(text))])

print(text)

Заметьте, что тут исправлен тот недостаток, что вы в своём примере "пробегали" на каждый символ исходной строки, а лишь каждый второй, и исходная строка text проходится полностью.

→ Ссылка