используя readlines () и count () в цикле "for"? - PullRequest
0 голосов
/ 09 октября 2018

В Codio есть проблема взять файл, найти, сколько раз в нем появляется строка, а затем вывести это число.Я смог получить результат, используя некоторые предложения, но я все еще неясен в некоторых вещах.

Главный вопрос в том, в какой момент цикл ищет подстроку S?Синтаксис count(), который я вижу повсюду, включает использование искомой строки с последующим оператором точки, а затем функцию с подстрокой, которую мы хотим найти в качестве параметра.Это будет выглядеть примерно так: P.count(S)

Что меня смущает, так это то, что функция использует line вместо P.Значит ли это, что функция ищет подстроку line?И если так, как это работает, если line является просто переменной счетчика для цикла for?Я просто хочу иметь более четкое представление о том, как эта функция работает в этом контексте, чтобы получить правильное количество раз, которое подстрока S появляется в файле P.

import sys
P= sys.argv[1]
S= sys.argv[2]

# Your code goes here

f = open(P, 'r')
c = 0

for line in f.readlines():
  c += line.count(S)

print(c)

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Давайте разберем цикл:

for line in f.readlines():
  c += line.count(S)

f - файловый дескриптор вашего открытого файла.

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

Таким образом, оператор for line in f.readlines(): выполняет итерацию переменной line через содержимое файла;на каждой итерации цикла line будет подходящим строковым значением, следующей строкой файла.

Следовательно, line.count(S) возвращает количество раз, когда целевая строка S появляется в этой строкефайл.Приращение c += добавляет это к вашему счетчику.

Достаточно ли ясно?


Кстати, пожалуйста, научитесь использовать описательные имена переменных.Однобуквенные имена в верхнем и нижнем регистре - плохая привычка в долгосрочной перспективе.

0 голосов
/ 09 октября 2018

означает ли это, что функция ищет "строку" для подстроки

Да, это именно то, что она означает.И значение line меняется в каждой итерации цикла.

И если да, то как это работает, если "line" является просто переменной счетчика для цикла "for"

Это не так.Петли Python for не имеют счетчиков.line - фактическая строка текста.

for letter in ['A', 'B', 'C']:
    print(letter)

печать

A
B
C
...