2013-11-14 3 views
8

Я пытаюсь подсчитать, сколько вхождений содержит определенные символы в строке, но результат неправильный.Count Vowels in String Python

Вот мой код:

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) 

Если я вхожу письмо A результат будет: 1 1 1 1 1

+0

Где 'stri' объявлен? Как вы создаете выход? Какой вклад? –

+1

Для подсчета символов строка использует метод count: ''aabccc'.count (' c ')' – dawg

+0

Возможный дубликат [Подсчитайте количество гласных в предложении и покажите наиболее частое] (http: // stackoverflow. com/questions/19933875/count-the-of-of-of-vowels-in-a-предложение-и-display-the-most-often) – inspectorG4dget

ответ

11

То, что вы хотите, можно сделать довольно просто так:

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

Если вы их не знаете, вот ссылка на map и на *.

5

Используйте 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 доступна только в Python 2.7+. Решение, которое должно работать на Python 2.5 будет использовать 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} 
+0

Я думаю, вы можете сделать 'd = defaultdict (int)'. – iCodez

+0

Хороший звонок, обновлено. –

4

if A or a in stri означает if A or (a in stri), который if True or (a in stri) который всегда True, и то же самое для каждого из ваших if заявлений.

Что вы хотели сказать, это if A in stri or a in stri.

Это ваша ошибка. Не единственный - вы на самом деле не считаете гласные, так как вы только проверяете, содержит ли строка один раз.

Другая проблема заключается в том, что ваш код далеко не лучший способ сделать это, например, здесь: Count vowels from raw input. Здесь вы найдете несколько приятных решений, которые легко могут быть приняты для вашего конкретного случая. Я думаю, что если вы подробно рассмотрите первый ответ, вы сможете правильно переписать свой код.

7
>>> 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 
+2

Вместо 'counts = {i: 0 для i в 'aeiouAEIOU'}' вы можете делать 'counts = {}. Fromkeys ('aeiouAEIOU', 0)' – dawg

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

не работает ... – AAI

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

(помните Разнос сек)

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

Объяснение кода было бы полезно. –

+0

Теперь вы отправили три ответа с блоками кода, а также не объяснили или не указали, почему ваше решение является правильным ответом. Пожалуйста, не просто отправляйте блоки кода. – dimo414

-1
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." 
+0

Добро пожаловать в So. Тем не менее, есть несколько вопросов с вашим ответом: 1) Он фактически ничего не объясняет OP 2) Он дублирует другой ответ (который также не разбивает счет для каждой из гласных, поскольку OP был пытаясь определить) – Foon

1

Для краткости и читаемости, использовать словарь понимание.

>>> 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} 

В качестве альтернативы вы можете рассмотреть именованный кортеж.

>>> 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) 
-1
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 
0
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]) 
0
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)) 
+0

Не могли бы вы добавить немного больше комментариев? – VermillionAzure

1
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 
+0

Вы можете пройти через 'string.lower()' вместо того, чтобы просто выполнять итерацию через строчную строку ввода, так как кажется, что OP хочет иметь дело с прописными буквами. Кроме того, ваш тест на гласную может быть просто «если char в« aeiou »:'. – Efferalgan

+0

Большой совет. Благодаря! –

1

Я написал код, используемый для подсчета гласных звуков. Вы можете использовать это, чтобы считать любого выбранного вами персонажа. Надеюсь, это поможет! (закодировано в 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) 
0

string1 = "Я люблю свою Индии гласный = 'AEIOU' для г в гласной: печать я + "->" + ул (string1.count (I))

+1

Пожалуйста, прочитайте это [как-ответ] (http://stackoverflow.com/help/how-to-answer) для обеспечения качественного ответа. Это был бы неплохой ответ, если бы просто включить код и без форматирования. – thewaywewere

0

Для тех, кто ищет наиболее простое решение, вот один

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)

0

Это ее rks для меня, а также подсчитывает согласные (подумайте об этом как о бонусе), однако, если вы действительно не хотите, чтобы подсчет согласных был всего, вам нужно удалить последний цикл for и последнюю переменную вверху.

Ее это код питона:

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)) 
0
>>> string = "aswdrtio" 
>>> [string.lower().count(x) for x in "aeiou"] 
[1, 0, 1, 1, 0] 
+0

Пожалуйста, объясните, что делает этот код. – mikep

+0

Подсчитывает количество вхождений каждого гласного в строку и помещает их в список, то есть [1a, 0e, 1i, 1o, 0u]. lower() изменяет «строку» на нижний регистр, поэтому он также будет считать заглавные гласные, если они есть. –

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