Home > OS >  count consecutive vowels in words
count consecutive vowels in words

Time:11-21

def openFile(fileName): 
  infile = open(fileName, "r")
  infile.readline() words = [] for data in infile: dataStrip = data.strip('\n') 
  words.append(dataStrip) return words

def findVowels(words): 
  splitWord = words.split() 
  for word in splitWord: 
    if word == "a" or "e" or "i" or "o" or "u": 
    return True 
  else: return False

def main(): 
  file = openFile("vowels.txt") 
  for word in file: 
    vowelCount = 0 
    if findVowels(word): 
      vowelCount  = 1 
    else: vowelCount = vowelCount 
  print(f"{word} has {vowelCount} vowels in it") 
main()

So, this is what I have so far to find vowels in each word in the text file. It doesn't work, and I still need to be able to count how many consecutive vowels are in the words. If you can help, but make it to the level of simplicity I have done so far, that'd be great help. Lmk if you need more info.

CodePudding user response:

If I understand the problem correctly. You can use two indexes and iterate over the word.

def count_vowels(word):
    vowel_count = 0

    current = 0;
    sequence = 1;
    while sequence < (len(word)):
        if (word[current] == 'a' or word[current] == 'e' or word[current] == 'i' or word[current] == 'o' or word[current] == 'u') \
                and (word[sequence] == 'a' or word[sequence] == 'e' or word[sequence] == 'i' or word[sequence] == 'o' or word[sequence] == 'u'):
            vowel_count  = 1
        current  = 1
        sequence  = 1

    return vowel_count


def main():
    words = "aaabeehi9ooguuute queueing aeioua".split()
    for word in words:
        vowel_count = count_vowels(word)
        print(f"{word} has {vowel_count} vowels in it")


main()

Output:

aaabeehi9ooguuute has 6 vowels in it
queueing has 4 vowels in it
aeioua has 5 vowels in it

CodePudding user response:

My version which search highest consecutive amount.

I use list for this

  • if there is vowel then add 1 to last value on list (with curren consecutive vowels),
  • if there is no vowel then append 0 at the end of list (to count next consecutive vowels)

And later I get max()

def count_vowels(word):

    all_results = [0]
    
    current = 0
    sequence = 1

    for char in word:
        if char in 'aeiou':
            all_results[-1]  = 1  # update last item
        else:
            all_results.append(0) # add new last item
          
        print(char, all_results)
  
    return max(all_results)

def main():
    words = "aaabeehi9ooguuute queueing aeioua aaaTee BTW aaa aTa".split()
    for word in words:
        vowel_count = count_vowels(word)
        print(f"{word} has {vowel_count} vowels in it")

main()

Result: (which display also history of counting)

a [1]
a [2]
a [3]
b [3, 0]
e [3, 1]
e [3, 2]
h [3, 2, 0]
i [3, 2, 1]
9 [3, 2, 1, 0]
o [3, 2, 1, 1]
o [3, 2, 1, 2]
g [3, 2, 1, 2, 0]
u [3, 2, 1, 2, 1]
u [3, 2, 1, 2, 2]
u [3, 2, 1, 2, 3]
t [3, 2, 1, 2, 3, 0]
e [3, 2, 1, 2, 3, 1]
aaabeehi9ooguuute has 3 vowels in it
q [0, 0]
u [0, 1]
e [0, 2]
u [0, 3]
e [0, 4]
i [0, 5]
n [0, 5, 0]
g [0, 5, 0, 0]
queueing has 5 vowels in it
a [1]
e [2]
i [3]
o [4]
u [5]
a [6]
aeioua has 6 vowels in it
a [1]
a [2]
a [3]
T [3, 0]
e [3, 1]
e [3, 2]
aaaTee has 3 vowels in it
B [0, 0]
T [0, 0, 0]
W [0, 0, 0, 0]
BTW has 0 vowels in it
a [1]
a [2]
a [3]
aaa has 3 vowels in it
a [1]
T [1, 0]
a [1, 1]
aTa has 1 vowels in it

EDIT:

Version which can count highest consecutive vowels and highest consecutive non-vowels. For non-volwes I use negative value and min(). Because sometime text may have only vowels or only non-vowels so I add extra 0 in all_results

def count_vowels(word):

    all_results = [0, 0]
    
    current = 0
    sequence = 1

    for char in word:
        if char in 'aeiou':
            if all_results[-1] < 0:
                all_results.append(0)
            all_results[-1]  = 1  # update last item
        else:
            if all_results[-1] > 0:
                all_results.append(0) # add new last item
            all_results[-1] -= 1  # update last item
          
        print(char, all_results)
        
    return max(all_results), min(all_results)


def main():
    words = "aaabeehi9ooguuute queueing aeioua aaaTee BTW aaa aTa".split()
    for word in words:
        vowel_count = count_vowels(word)
        print(f"{word} | max vowels: {vowel_count[0]} | max non-vowels: {-vowel_count[1]}")

main()

Result:

a [0, 1]
a [0, 2]
a [0, 3]
b [0, 3, -1]
e [0, 3, -1, 1]
e [0, 3, -1, 2]
h [0, 3, -1, 2, -1]
i [0, 3, -1, 2, -1, 1]
9 [0, 3, -1, 2, -1, 1, -1]
o [0, 3, -1, 2, -1, 1, -1, 1]
o [0, 3, -1, 2, -1, 1, -1, 2]
g [0, 3, -1, 2, -1, 1, -1, 2, -1]
u [0, 3, -1, 2, -1, 1, -1, 2, -1, 1]
u [0, 3, -1, 2, -1, 1, -1, 2, -1, 2]
u [0, 3, -1, 2, -1, 1, -1, 2, -1, 3]
t [0, 3, -1, 2, -1, 1, -1, 2, -1, 3, -1]
e [0, 3, -1, 2, -1, 1, -1, 2, -1, 3, -1, 1]
aaabeehi9ooguuute | max vowels: 3 | max non-vowels: 1
q [0, -1]
u [0, -1, 1]
e [0, -1, 2]
u [0, -1, 3]
e [0, -1, 4]
i [0, -1, 5]
n [0, -1, 5, -1]
g [0, -1, 5, -2]
queueing | max vowels: 5 | max non-vowels: 2
a [0, 1]
e [0, 2]
i [0, 3]
o [0, 4]
u [0, 5]
a [0, 6]
aeioua | max vowels: 6 | max non-vowels: 0
a [0, 1]
a [0, 2]
a [0, 3]
T [0, 3, -1]
e [0, 3, -1, 1]
e [0, 3, -1, 2]
aaaTee | max vowels: 3 | max non-vowels: 1
B [0, -1]
T [0, -2]
W [0, -3]
BTW | max vowels: 0 | max non-vowels: 3
a [0, 1]
a [0, 2]
a [0, 3]
aaa | max vowels: 3 | max non-vowels: 0
a [0, 1]
T [0, 1, -1]
a [0, 1, -1, 1]
aTa | max vowels: 1 | max non-vowels: 1

BTW:

To count more types of chars - vowels, consonants, digits, others - I would use tuples ("vowels", 0), ("consonants", 0) instead of positive and negative values.


EDIT:

Full code

I assume you have every word in separated line and you don't have header at the top of file.

def count_vowels(word):

    all_results = [0]
    
    current = 0
    sequence = 1

    for char in word:
        if char in 'aeiou':
            all_results[-1]  = 1   # update last item
        else:
            all_results.append(0)  # add new last item
          
        #print(char, all_results)  # ie. `g [0, 5, 0, 0]`
  
    return max(all_results)

def read_words():
    fh = open("vowels.txt")   # `fh` means `file handler`

    text = fh.read()  # read all as one string

    fh.close()

    words = text.split("\n")   # split string into list of lines
    #words = text.splitlines()  # split string into list of lines
   
    #words = words[1:]  # skip first line with header

    #words = "aaabeehi9ooguuute queueing aeioua aaaTee BTW aaa aTa".split()

    return words

def main():

    # --- read ---
    
    words = read_words()

    # --- count ---

    words_with_counts = []
    
    for word in words:
        vowel_count = count_vowels(word)
        words_with_counts.append( (vowel_count, word) )
        
    # --- sort ---
    
    sorted_words_with_counts = sorted(words_with_counts) #, reverse=True)

    # --- display ---
    
    for vowel_count, word in sorted_words_with_counts:
        print(f"{word} has {vowel_count} vowels in it")

# --- main ---

main()
  • Related