Форум сайта python.su
Здравствуйте, возможно, кто-то может помочь мне с написанием довольно сложной функции. У меня какая-то каша в голове, туго получается.
Write a function to_weird that accepts any number of strings, and returns the same strings with all even indexed characters in each word upper cased, and all odd indexed characters in each word lower cased. The indexing just explained is zero based, so the index 0 is even, therefore that character should be upper cased.
The passed in string will only consist of alphabetical characters and spaces(' ‘). Spaces will only be present if there are multiple words. Words will be separated by a single space(’ ').
Examples:
to_weird (“String”) -> returns “StRiNg”
to_weird (“Weird string case”) -> returns “WeIrD StRiNg CaSe”
Офлайн
Ты думаешь тут все такие умные что английский знают?
Онлайн
И где наработки, того что туго получается?
Офлайн
solyarity
Вот, сделал очень наскоро (без применения map, lambda и т.д).
def to_weird(strings): result = '' words = strings.split() new_words = [] for word in words: new_word = '' for n,c in enumerate(word): if n%2 == 0: new_c = c.upper() else: new_c = c.lower() new_word += new_c new_words.append(new_word) result = ' '.join(new_words) return result print(to_weird("Weird string case"))
Офлайн
Спасибо огромное
Офлайн
old_montyПробелы теряет она
Вот, сделал очень наскоро
" abc def "
"AbC DeF"
>>> import re >>> >>> def tr(s): ... lst = [] ... is_even = True ... for c in s: ... lst.append((is_even and c.upper()) or c) ... is_even = not is_even ... out = ''.join(lst) ... return out ... >>> def cap_in_words_even(s): ... return re.sub(r'\S+', lambda mo: tr(mo.group()), s) ... >>> cap_in_words_even('abcd') 'AbCd' >>> cap_in_words_even('abc defghi') 'AbC DeFgHi' >>> cap_in_words_even(' abc def ') ' AbC DeF ' >>>
Отредактировано py.user.next (Март 3, 2017 03:09:02)
Офлайн
py.user.nextВот зачем переделываешь условие задачи?
Пробелы теряет она" abc def " "AbC DeF"
solyarityА вообще, спасибо. Интересное решение.
Words will be separated by a single space(’ ').
Examples:
to_weird (“String”) -> returns “StRiNg”
to_weird (“Weird string case”) -> returns “WeIrD StRiNg CaSe”
Отредактировано old_monty (Март 3, 2017 06:10:19)
Офлайн
old_montyДа, не заметил я в конце это условие. А пробелы по краям подходят под условие. Но тут не это главное; главное, что обычно нет этого условия про один пробел межу словами, есть понятие “пустое пространство” (whitespace). Тогда слова можно подавать в программу не только в одной строке, но и по одному в строке на нескольких строках, так как конец строки является whitespace.
Вот зачем переделываешь условие задачи?
Отредактировано py.user.next (Март 3, 2017 06:25:30)
Офлайн
def to_weird(s): return "".join("{}{}".format(x[0].upper(), x[1]) for x in zip_longest(s[::2], s[1::2], fillvalue="")) def cap_in_words_even(s): return re.sub(r'\S+', lambda mo: to_weird(mo.group()), s)
Офлайн