Форум сайта python.su
0
Необходимо проверить соответствует ли строка заданным требованиям - согласные буквы должны чередоваться с гласными (строка не содержит пробелов, знаков пунктуации и цифр).
Вот, что я написал:
def checker(x, y): '''Проверяет символы на соответствие условию''' VOWELS = ['A', 'E', 'I', 'O', 'U', 'Y'] CONSOSANTS = ['B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M,' 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Z'] if (x in CONSOSANTS and y in VOWELS) or (x in VOWELS and y in CONSOSANTS): return True else: return False
def foo(st): lst = st.split() new_lst = [] flag = False for word in lst: for elem1, elem2 in zip(word, word[1:]): elem1 = elem1.upper() elem2 = elem2.upper() #тут мысль обрывается return new_lst
Отредактировано kozlo22 (Янв. 8, 2014 22:08:14)
Офлайн
857
>>> def f(s): ... alpha = set('aeiouy') ... it = iter(s) ... inalpha = next(it, None) in alpha ... for c in it: ... if c.lower() in alpha: ... if inalpha: ... return False ... elif not inalpha: ... return False ... inalpha = not inalpha ... return True ... >>> f('') True >>> f('abab') True >>> f('abaa') False >>>
Отредактировано py.user.next (Янв. 8, 2014 23:11:07)
Офлайн
0
py.user.next
Ваше решние некоректно рабоатет:
f('aba')
Falsef('bwbwbw')
TrueОтредактировано kozlo22 (Янв. 9, 2014 00:15:01)
Офлайн
857
kozlo22ты на чём-то другом проверял
Ваше решние некоректно рабоатет:
>>> f('aba') True >>> f('bwbwbw') False >>>
kozlo22итератор не даёт создавать копию строки
Я тоже думал, что надо воспользоваться итераторами, только я с ними пока не очень дружу.
Отредактировано py.user.next (Янв. 9, 2014 00:27:01)
Офлайн
0
py.user.next
я ошибся, извините, все работает.
Офлайн
47
#!/usr/bin/env python from itertools import imap as map from toolz import sliding_window, isdistinct def isvowel(sym): return sym in set("aeiouy") def f(string): return all(map(isdistinct, sliding_window(2, map(isvowel, string))))
#!/usr/bin/env hy (import [itertools [imap :as map]] [toolz [sliding_window isdistinct]]) (defn isvowel [sym] (in sym (set "aeiouy"))) (defn f [string] (all (map isdistinct (sliding_window 2 (map isvowel string)))))
Отредактировано bismigalis (Янв. 10, 2014 19:35:31)
Офлайн