Найти - Пользователи
Полная версия: Проверить всю строку на соответствие условию
Начало » Python для новичков » Проверить всю строку на соответствие условию
1
kozlo22
Необходимо проверить соответствует ли строка заданным требованиям - согласные буквы должны чередоваться с гласными (строка не содержит пробелов, знаков пунктуации и цифр).
Вот, что я написал:
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 
py.user.next
>>> 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
>>>
kozlo22
py.user.next
Ваше решние некоректно рабоатет:
 f('aba')
False
f('bwbwbw')
True

Хотя в целом идея ясна. Я тоже думал, что надо воспользоваться итераторами, только я с ними пока не очень дружу.

py.user.next
kozlo22
Ваше решние некоректно рабоатет:
ты на чём-то другом проверял

>>> f('aba')
True
>>> f('bwbwbw')
False
>>>

kozlo22
Я тоже думал, что надо воспользоваться итераторами, только я с ними пока не очень дружу.
итератор не даёт создавать копию строки
kozlo22
py.user.next
я ошибся, извините, все работает.
bismigalis
#!/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)))))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB