Я работаю над этой проблемой кодирования «Подсчитать количество слов и строк, которые имеют более X гласных для каждого Y слов в каждой строке Z»
В основном входная строка имеет несколько строк, и мне нужноподсчитать слова, содержащие в себе X или более гласных.Но ограничением является то, что мне нужно рассмотреть только альтернативную Z-ю строку, а также альтернативное Y-е слово в этих Z-х строках.Например, скажем, мне нужно посчитать каждое 3-е слово, содержащее 2 или более гласных в каждой 3-й строке.Так вот X=2
, Y=3
, Z=3
.Проверьте ниже входную строку:
"1.When I first brought my cat home.
2.It cost a lot to adopt her.
3.I paid forty dollars for it.
4.And then I had to buy litter, a litterbox.
5.Also bought food, and dishes for her to eat out of.
6.There's a **leash** law for cats in Fort **Collins**.
7.If they're not in your yard they have to be on a leash.
8.Anyway, my cat is my best friend.
9.I'm glad I got her.
10.She sleeps under the covers with me when it's cold."
Вывод: Количество слов: 2, Количество строк: 1
Таким образом, основываясь на критериях Z=3
, то есть подсчитайте каждую 3-ю строку, чтобы рассмотреть строкиявляются line number 3, 6, 9
.Также в этих строках нам нужно сосчитать Y=3 i.e. every 3rd word
.Таким образом, следует учитывать следующие слова: "forty, it" from line 3
, "leash, cats, Collins" from line 6
и "I" from line 9
.Учитывая этот критерий, совпадающие слова с 2 или более гласными находятся только в строке 6 со словами "leash"
и "Collins"
, поэтому на выходе получается WordCount = 2 и LineCount = 1.
Это мой первый разписать что-нибудь на Python, поэтому написал основной код ниже:
class StringCount: #Count the number of words & lines that have more than X vowels for every Y words in every Z line.
lines = list();
totalMatchedLines = 0;
totalMatchedWords = 0;
matchedChars = 0;
def __init__(self, inputString, vowelCount, skipWords, skipLines, wordDelimiter, lineDelimiter):
self.inputString = inputString;
self.vowelCount = vowelCount;
self.skipWords = skipWords;
self.skipLines = skipLines;
self.wordDelimiter = wordDelimiter;
def splitLines(self):
if self.inputString.strip() == "":
print ("Please enter a valid string!");
return False;
self.lines = self.inputString.splitlines();
def splitWords(self):
self.matchedWords = 0;
self.matchedLines = 0;
self.linesLength = len(self.lines);
if self.linesLength < self.skipLines:
print ("Input string should be greater than {0}" .format(self.skipLines));
return False;
lineCount = self.skipLines - 1;
wordCount = self.skipWords - 1;
lineInUse = "";
words = list();
while (lineCount < self.linesLength):
self.matchedWords = 0;
self.matchedLines = 0;
self.words = self.lines[lineCount].split();
self.wordsLength = len(self.words);
wordCount = self.skipWords - 1;
while (wordCount < self.wordsLength):
self.matchedChars = 0;
for i in self.words[wordCount].lower():
if(i=='a' or i=='e' or i=='i' or i=='o' or i=='u'):
self.matchedChars += 1;
if self.matchedChars >= self.vowelCount:
self.matchedWords += 1;
wordCount += self.skipWords;
if self.matchedWords > 0:
self.matchedLines += 1;
self.totalMatchedWords += self.matchedWords;
self.totalMatchedLines += self.matchedLines;
lineCount += self.skipLines;
print ("WordCount = %s" % (self.totalMatchedWords));
print ("LineCount = %s" % (self.totalMatchedLines));
Так как это мой первый код на Python, я хотел проверить, как оптимизировать этот код как в производительности, так и в оптимизации строк.Есть ли уловки, чтобы сократить кратные циклы while и цикл for?
Любая помощь приветствуется!