Count Vowels in String Python

Count Vowels in String Python



I'm trying to count how many occurrences there are of specific characters in a string, but the output is wrong.



Here is my code:


inputString = str(input("Please type a sentence: "))
a = "a"
A = "A"
e = "e"
E = "E"
i = "i"
I = "I"
o = "o"
O = "O"
u = "u"
U = "U"
acount = 0
ecount = 0
icount = 0
ocount = 0
ucount = 0

if A or a in stri :
acount = acount + 1

if E or e in stri :
ecount = ecount + 1

if I or i in stri :
icount = icount + 1

if o or O in stri :
ocount = ocount + 1

if u or U in stri :
ucount = ucount + 1

print(acount, ecount, icount, ocount, ucount)



If I enter the letter A the output would be: 1 1 1 1 1


A


1 1 1 1 1






Where is stri declared? How are you generating the output? What's the input?

– Thomas Upton
Nov 14 '13 at 0:07


stri






To count characters is a string use the count method: 'aabccc'.count('c')

– dawg
Nov 14 '13 at 0:07


'aabccc'.count('c')






possible duplicate of Count the amount of vowels in a sentence and display the most frequent

– inspectorG4dget
Nov 14 '13 at 0:08




20 Answers
20



What you want can be done quite simply like so:


>>> mystr = input("Please type a sentence: ")
Please type a sentence: abcdE
>>> print(*map(mystr.lower().count, "aeiou"))
1 1 0 0 0
>>>



In case you don't know them, here is a reference on map and one on the *.


map


*


>>> sentence = input("Sentence: ")
Sentence: this is a sentence
>>> counts = i:0 for i in 'aeiouAEIOU'
>>> for char in sentence:
... if char in counts:
... counts[char] += 1
...
>>> for k,v in counts.items():
... print(k, v)
...
a 1
e 3
u 0
U 0
O 0
i 2
E 0
o 0
A 0
I 0






Rather than counts = i:0 for i in 'aeiouAEIOU' you can do counts=.fromkeys('aeiouAEIOU',0)

– dawg
Nov 14 '13 at 0:10


counts = i:0 for i in 'aeiouAEIOU'


counts=.fromkeys('aeiouAEIOU',0)


def countvowels(string):
num_vowels=0
for char in string:
if char in "aeiouAEIOU":
num_vowels = num_vowels+1
return num_vowels



(remember the spacing s)



Use a Counter


Counter


>>> from collections import Counter
>>> c = Counter('gallahad')
>>> print c
Counter('a': 3, 'l': 2, 'h': 1, 'g': 1, 'd': 1)
>>> c['a'] # count of "a" characters
3



Counter is only available in Python 2.7+. A solution that should work on Python 2.5 would utilize defaultdict


Counter


defaultdict


>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for c in s:
... d[c] = d[c] + 1
...
>>> print dict(d)
'a': 3, 'h': 1, 'l': 2, 'g': 1, 'd': 1






I think you can do d = defaultdict(int).

– iCodez
Nov 14 '13 at 0:49


d = defaultdict(int)






Good call, updated.

– Prashant Kumar
Nov 14 '13 at 0:52


data = raw_input("Please type a sentence: ")
vowels = "aeiou"
for v in vowels:
print v, data.lower().count(v)






doesn't work...

– AAI
Oct 3 '16 at 3:54



if A or a in stri means if A or (a in stri) which is if True or (a in stri) which is always True, and same for each of your if statements.


if A or a in stri


if A or (a in stri)


if True or (a in stri)


True


if



What you wanted to say is if A in stri or a in stri.


if A in stri or a in stri



This is your mistake. Not the only one - you are not really counting vowels, since you only check if string contains them once.



The other issue is that your code is far from being the best way of doing it, please see, for example, this: Count vowels from raw input. You'll find a few nice solutions there, which can easily be adopted for your particular case. I think if you go in detail through the first answer, you'll be able to rewrite your code in a correct way.


count = 0

string = raw_input("Type a sentence and I will count the vowels!").lower()

for char in string:

if char in 'aeiou':

count += 1

print count






You could go through string.lower() instead of just iterating through the plain input string, as it seems OP wants to be able to deal with uppercase letters. Also, your test for a vowel could just be if char in "aeiou":.

– Efferalgan
Oct 7 '16 at 19:00


string.lower()


if char in "aeiou":






Great advice. Thanks!

– Benjamin Tunney
Nov 1 '16 at 19:22



For brevity and readability, use a dictionary comprehension.


>>> inp = raw_input() # use input in Python3
hI therE stAckOverflow!
>>> search = inp.lower()
>>> v:search.count(v) for v in 'aeiou'
'a': 1, 'i': 1, 'e': 3, 'u': 0, 'o': 2



Alternatively, you can consider a named tuple.


>>> from collections import namedtuple
>>> vocals = 'aeiou'
>>> s = 'hI therE stAckOverflow!'.lower()
>>> namedtuple('Vowels', ' '.join(vocals))(*(s.count(v) for v in vocals))
Vowels(a=1, e=3, i=1, o=2, u=0)



I wrote a code used to count vowels. You may use this to count any character of your choosing. I hope this helps! (coded in Python 3.6.0)


while(True):
phrase = input('Enter phrase you wish to count vowels: ')
if phrase == 'end': #This will to be used to end the loop
quit() #You may use break command if you don't wish to quit
lower = str.lower(phrase) #Will make string lower case
convert = list(lower) #Convert sting into a list
a = convert.count('a') #This will count letter for the letter a
e = convert.count('e')
i = convert.count('i')
o = convert.count('o')
u = convert.count('u')

vowel = a + e + i + o + u #Used to find total sum of vowels

print ('Total vowels = ', vowel)
print ('a = ', a)
print ('e = ', e)
print ('i = ', i)
print ('o = ', o)
print ('u = ', u)



For anyone who looking the most simple solution, here's the one




vowel = ['a', 'e', 'i', 'o', 'u']
Sentence = input("Enter a phrase: ")
count = 0
for letter in Sentence:
if letter in vowel:
count += 1
print(count)


>>> string = "aswdrtio"
>>> [string.lower().count(x) for x in "aeiou"]
[1, 0, 1, 1, 0]






Please explain what this code does.

– mikep
Nov 25 '17 at 2:23






Counts the number of occurrences of each vowel in the 'string' and puts them in a list i.e. [1a, 0e, 1i, 1o, 0u]. lower() changes the 'string' to lowercase so it will also count uppercase vowels if there were any.

– david clark
Nov 25 '17 at 4:21


sentence = input("Enter a sentence: ").upper()
#create two lists
vowels = ['A','E',"I", "O", "U"]
num = [0,0,0,0,0]

#loop through every char
for i in range(len(sentence)):
#for every char, loop through vowels
for v in range(len(vowels)):
#if char matches vowels, increase num
if sentence[i] == vowels[v]:
num[v] += 1

for i in range(len(vowels)):
print(vowels[i],":", num[i])


count = 0
s = "azcbobobEgghakl"
s = s.lower()
for i in range(0, len(s)):
if s[i] == 'a'or s[i] == 'e'or s[i] == 'i'or s[i] == 'o'or s[i] == 'u':
count += 1
print("Number of vowels: "+str(count))






Can you add a little more commentary?

– VermillionAzure
Oct 3 '16 at 19:34



string1='I love my India'
vowel='aeiou'
for i in vowel:
print i + "->"+ str(string1.count(i))






Please read this how-to-answer for providing quality answer. It would be not a good answer if just include the code and without formatting.

– thewaywewere
May 28 '17 at 16:57



This works for me and also counts the consonants as well (think of it as a bonus) however, if you really don't want the consonant count all you have to do is delete the last for loop and the last variable at the top.



Her is the python code:


data = input('Please give me a string: ')
data = data.lower()
vowels = ['a','e','i','o','u']
consonants = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z']
vowelCount = 0
consonantCount = 0


for string in data:
for i in vowels:
if string == i:
vowelCount += 1
for i in consonants:
if string == i:
consonantCount += 1

print('Your string contains %s vowels and %s consonants.' %(vowelCount, consonantCount))


Simplest Answer:

inputString = str(input("Please type a sentence: "))

vowel_count = 0

inputString =inputString.lower()

vowel_count+=inputString.count("a")
vowel_count+=inputString.count("e")
vowel_count+=inputString.count("i")
vowel_count+=inputString.count("o")
vowel_count+=inputString.count("u")

print(vowel_count)



Suppose,



S = "Combination"


import re
print re.findall('a|e|i|o|u', S)



Prints:
['o', 'i', 'a', 'i', 'o']



For your case in a sentence (Case1):



txt = "blah blah blah...."


import re
txt = re.sub('[rtnd,.!?\/()[]]+', " ", txt)
txt = re.sub('s2,', " ", txt)
txt = txt.strip()
words = txt.split(' ')

for w in words:
print w, len(re.findall('a|e|i|o|u', w))



Case2


import re, from nltk.tokenize import word_tokenize

for w in work_tokenize(txt):
print w, len(re.findall('a|e|i|o|u', w))


def count_vowel():
cnt = 0
s = 'abcdiasdeokiomnguu'
s_len = len(s)
s_len = s_len - 1
while s_len >= 0:
if s[s_len] in ('aeiou'):
cnt += 1
s_len -= 1
print 'numofVowels: ' + str(cnt)
return cnt

def main():
print(count_vowel())

main()






An explanation of the code would be helpful.

– Brent Washburne
Jun 23 '15 at 4:06






You've now posted three answers with blocks of code and no explanation or detail as to why your solution is the right answer. Please don't just post code blocks.

– dimo414
Jun 23 '15 at 5:05


count = 0
name=raw_input("Enter your name:")
for letter in name:
if(letter in ['A','E','I','O','U','a','e','i','o','u']):
count=count + 1
print "You have", count, "vowels in your name."






Welcome to So. However, there are several issues with your answer: 1) It doesn't actually explain anything to the OP 2) It's duplicative with another answer (that also doesn't break up the count for each of the vowels as the OP was trying to determine)

– Foon
Sep 3 '15 at 13:21


1 #!/usr/bin/python
2
3 a = raw_input('Enter the statement: ')
4
5 ########### To count number of words in the statement ##########
6
7 words = len(a.split(' '))
8 print 'Number of words in the statement are: %r' %words
9
10 ########### To count vowels in the statement ##########
11
12 print 'n' "Below is the vowel's count in the statement" 'n'
13 vowels = 'aeiou'
14
15 for key in vowels:
16 print key, '=', a.lower().count(key)
17



Thanks for contributing an answer to Stack Overflow!



But avoid



To learn more, see our tips on writing great answers.



Required, but never shown



Required, but never shown




By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

Edmonton

Crossroads (UK TV series)