Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2017 18:46:34

solyarity
Зарегистрирован: 2017-03-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание функции

Здравствуйте, возможно, кто-то может помочь мне с написанием довольно сложной функции. У меня какая-то каша в голове, туго получается.

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”

Офлайн

#2 Март 2, 2017 19:42:22

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2828
Репутация: +  185  -
Профиль   Отправить e-mail  

Написание функции

Ты думаешь тут все такие умные что английский знают?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#3 Март 2, 2017 19:44:11

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Написание функции

И где наработки, того что туго получается?

Офлайн

#4 Март 2, 2017 20:14:56

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Написание функции

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"))

Офлайн

#5 Март 2, 2017 20:22:50

solyarity
Зарегистрирован: 2017-03-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание функции

Спасибо огромное

Офлайн

#6 Март 3, 2017 03:01:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9998
Репутация: +  857  -
Профиль   Отправить e-mail  

Написание функции

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)

Офлайн

#7 Март 3, 2017 05:54:57

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Написание функции

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)

Офлайн

#8 Март 3, 2017 06:24:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9998
Репутация: +  857  -
Профиль   Отправить e-mail  

Написание функции

old_monty
Вот зачем переделываешь условие задачи?
Да, не заметил я в конце это условие. А пробелы по краям подходят под условие. Но тут не это главное; главное, что обычно нет этого условия про один пробел межу словами, есть понятие “пустое пространство” (whitespace). Тогда слова можно подавать в программу не только в одной строке, но и по одному в строке на нескольких строках, так как конец строки является whitespace.



Отредактировано py.user.next (Март 3, 2017 06:25:30)

Офлайн

#9 Март 3, 2017 07:01:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Написание функции

 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)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version