2015-11-09 2 views
4

мне удалось закодировать это:Как вывести наиболее распространенный гласный

def vowels(s) : 
    result = 0 
    n = 0 
    while n<len(s): 
     if s[n] in "AEIOUaeiou" : result = result+1 
     n = n+1 
    return result 

line = input("Type a line of text: ") 
print("The line contains", vowels(line), "vowels") 

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

+0

Защиту гласные (s) : результат = 0 n = 0 в то время как n

+0

'' collections.Counter (буква для буквы в s, если письмо в 'AEIOUaeiou'). most_common() '' –

ответ

0

Вы можете использовать collections.Counter сделать это:

import collections 

vowels = lambda s: collections.Counter(i for i in s if i in 'AEIOUaeiou').most_common(1)[0] 

line = input("Type a line of text: ") 
v = vowels(line) 

print("The most frequently vowel is", v[0], 'the times is', v[1]) 
1

You может использовать collections.Counter, чтобы получить количество появления каждой гласной в тексте.

>>> from collections import Counter 

>>> def vowels(s): 
...  return Counter(c for c in s if c in "AEIOUaeiou") 

>>> counter = vowels("Lorem ipsum lorem") 
>>> print counter 
Counter({'e': 2, 'o': 2, 'i': 1, 'u': 1}) 
>>> print sum(counter.values()) 
6 
>>> print counter.most_common() 
[('e', 2), ('o', 2), ('i', 1), ('u', 1)] 
0

Что мой подход делает:

  • Использование lower(), чтобы сделать вход в нижний регистр.
  • подсчитывает частоту каждого гласного входа и магазина в списке.
  • Снова сортируйте список, чтобы набрать наибольшую частоту.
  • Выберите первый элемент отсортированного списка.

Надеется, что это помогает:

line = input("Type a line of text: ").lower() 
print(sorted([(i,line.count(i)) for i in "aeiou"], key=lambda x:x[1], reverse=True)[0]) 
0
def vowels(s) : 
    vowel_letters = "AEIOUaeiou" 
    result = [] 
    for vowel in vowel_letters: 
     result.append((vowel,s.count(vowel))) 
    result.sort(key=lambda tup: tup[1]) 
    return result[-1] 

line = raw_input("Type a line of text: ") 
print vowels(line) 
+0

Немного комментариев может помешать вашим ответам быть помеченными как слишком короткие. –

1

использование делает из collections.Counter и его метода most_common

from collections import Counter 

def vowels(s) : 
    vow_found = [i for i in s.lower() if i in 'aeiou'] 
    c = Counter(vow_found) 
    return len(vow_found), c.most_common() 

line = input("Type a line of text: ") 
numvow, most_com = vowels(line) 
print("The line contains", numvow, "vowels") 
print("and the most common are", most_com) 

, который, с входом

hello I am your friend today 

производит

The line contains 10 vowels 
and the most common are [('o', 3), ('i', 2), ('a', 2), ('e', 2), ('u', 1)] 
0

Более короткий простой код для тех же функций

from collections import Counter 
def most_common_vowel(input_string): 
    return Counter(
      filter(lambda x: x in "aeiou", input_string.lower()) 
     ).most_common(1) 

Использование filter для удаления не гласные из строки и использования Counter получить наиболее распространенный элемент

+0

'E' и' e' будут иметь раздельную частоту. Сначала я сделал то же самое, но я думаю, что имеет смысл объединить их независимо от нижнего/верхнего регистра. – Pynchia

+0

@Pynchia Исправлено. – shanmuga

Смежные вопросы