Python 3.0 - Как вывести, какой символ считается больше всего?

Таким образом, я смог создать программу, которая подсчитывает количество гласных (особенно eio) в текстовом файле, который есть на моем компьютере. Тем не менее, я не могу понять на всю жизнь, как показать, какой из них встречается чаще всего. Я предполагал, что скажу что-то вроде

for ch in 'i':
    return numvowel?

Я просто не очень уверен, что шаг. Я в основном хочу, чтобы он выводил в конце, говоря: "Письмо, я, произошло больше всего в текстовом файле"

def vowelCounter():
    inFile = open('file.txt', 'r')
    contents = inFile.read()

    # variable to store total number of vowels
    numVowel = 0

    # This counts the total number of occurrences of vowels o e i.
    for ch in contents:
        if ch in 'i':
            numVowel = numVowel + 1
        if ch in 'e':
            numVowel = numVowel + 1    
        if ch in 'o':
            numVowel = numVowel + 1

    print('file.txt has', numVowel, 'vowel occurences total')
    inFile.close()

vowelCounter()

5 ответов

Решение

Если вы хотите показать, какой из них встречается чаще всего, вам нужно вести подсчет каждого отдельного гласного вместо всего лишь одного подсчета, как то, что вы сделали.

Сохраните 3 отдельных счетчика (по одному для каждого из 3 гласных, которые вам нужны), и затем вы можете получить общую сумму, суммируя их ИЛИ, если вы хотите узнать, какой гласный звук встречается чаще всего, вы можете просто сравнить 3 счетчика, чтобы узнать.

Попробуйте использовать регулярные выражения; https://docs.python.org/3.5/library/re.html

import re

def vowelCounter():

    with open('file.txt', 'r') as inFile:

        content = inFile.read()

        o_count = len(re.findall('o',content))
        e_count = len(re.findall('e',content))
        i_count = len(re.findall('i',content))

        # Note, if you want this to be case-insensitive,
        # then add the addition argument re.I to each findall function

        print("O's: {0}, E's:{1}, I's:{2}".format(o_count,e_count,i_count))

vowelCounter()

Вы можете сделать это:

vowels = {} # dictionary of counters, indexed by vowels

for ch in contents:
    if ch in ['i', 'e', 'o']:
        # If 'ch' is a new vowel, create a new mapping for it with the value 1
        # otherwise increment its counter by 1
        vowels[ch] = vowels.get(ch, 0) + 1

print("'{}' occured the most."
    .format(*[k for k, v in vowels.items() if v == max(vowels.values())]))

Python утверждает, что в него включены "батареи", и это классический случай. Класс collections.Counter делает в значительной степени это.

from collections import Counter

with open('file.txt') as file_
    counter = Counter(file_.read())

print 'Count of e: %s' % counter['e']
print 'Count of i: %s' % counter['i']
print 'Count of o: %s' % counter['o']

Позволять vowels = 'eio', затем

{ i: contents.count(i) for i in vowels }

Для каждого элемента в vowels посчитать количество вхождений в contents и добавьте его как часть получающегося словаря (обратите внимание на заключительные фигурные скобки над пониманием).

Другие вопросы по тегам