ajkey94
ajkey94

Reputation: 431

How do I print words with only 1 vowel?

my code so far, but since i'm so lost it doesn't do anything close to what I want it to do:

vowels = 'a','e','i','o','u','y'
#Consider 'y' as a vowel

input = input("Enter a sentence: ")

words = input.split()
if vowels == words[0]:
    print(words)

so for an input like this:

"this is a really weird test"

I want it to only print:

this, is, a, test

because they only contains 1 vowel.

Upvotes: 2

Views: 3555

Answers (8)

Qtax
Qtax

Reputation: 33918

I find your lack of regex disturbing.

Here's a plain regex only solution (ideone):

import re

str = "this is a really weird test"

words = re.findall(r"\b[^aeiouy\W]*[aeiouy][^aeiouy\W]*\b", str)

print(words)

Upvotes: 0

zds_cn
zds_cn

Reputation: 288

i found so much nice code here ,and i want to show my ugly one:

v = 'aoeuiy'
o = 'oooooo'

sentence = 'i found so much nice code here'

words = sentence.split()

trans = str.maketrans(v,o)

for word in words:
    if not word.translate(trans).count('o') >1:
        print(word)

Upvotes: 0

pradyunsg
pradyunsg

Reputation: 19456

Try this:

vowels = ('a','e','i','o','u','y')
words = [i for i in input('Enter a sentence ').split() if i != '']
interesting = [word for word in words if sum(1 for char in word if char in vowel) == 1]

Upvotes: 0

John La Rooy
John La Rooy

Reputation: 304355

>>> s = "this is a really weird test"
>>> [w for w in s.split() if len(w) - len(w.translate(None, "aeiouy")) == 1]
['this', 'is', 'a', 'test']

Not sure if words with no vowels are required. If so, just replace == 1 with < 2

Upvotes: 3

Kenosis
Kenosis

Reputation: 6204

Here's another option:

import re

words = 'This sentence contains a bunch of cool words'

for word in words.split():
    if len(re.findall('[aeiouy]', word)) == 1:
        print word

Output:

This
a
bunch
of
words

Upvotes: 5

Akavall
Akavall

Reputation: 86266

Try this:

vowels = set(('a','e','i','o','u','y'))

def count_vowels(word):
    return sum(letter in vowels for letter in word)

my_string = "this is a really weird test"

def get_words(my_string):
    for word in my_string.split():
        if count_vowels(word) == 1:
            print word

Result:

>>> get_words(my_string)
this
is
a
test

Upvotes: 5

mgilson
mgilson

Reputation: 310049

You can translate all the vowels to a single vowel and count that vowel:

import string
trans = string.maketrans('aeiouy','aaaaaa')
strs = 'this is a really weird test'
print [word for word in strs.split() if word.translate(trans).count('a') == 1]

Upvotes: 4

Jeff Bootsholz
Jeff Bootsholz

Reputation: 3068

You may use one for-loop to save the sub-strings into the string array if you have checked he next character is a space. Them for each substring, check if there is only one a,e,i,o,u (vowels) , if yes, add into the another array

aFTER THAT, FROM another array, concat all the strings with spaces and comma

Upvotes: 0

Related Questions