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