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
и добавьте его как часть получающегося словаря (обратите внимание на заключительные фигурные скобки над пониманием).