python 3.4 Подсчет вхождений в файле .txt

Я пишу «простую» небольшую программу для класса, который я беру. это должно спросить меня, какую команду искать, а затем вернуть количество раз, которое она появляется в списке в файле .txt. он запрашивает ввод, как и должен, и, кажется, работает отлично! он работает уже час :) я вообще не получаю ошибок, кажется, он застрял в цикле. всем заранее спасибо за помощь!

вот мой код

count = 0

def main():
# open file
    teams = open('WorldSeriesWinners.txt', 'r')
# get input
    who = input('Enter team name: ')
#begin search
    lst = teams.readline()
    while lst != '':
        if who in lst:
            count += 1

teams.close()
print(count)

main()

person Qwastic    schedule 22.04.2014    source источник


Ответы (3)


Вам не нужно проходить строки подсчета файлов вручную. Вы можете просто использовать .read():

count = lst.count(who)

Другая проблема заключается в том, что вы вызываете teams.close() и print(count) вне функции.

Это означает, что они попытаются выполниться до того, как вы вызовете main, и вы пытаетесь закрыть «команды», которые еще не были открыты или определены, поэтому ваш код не знает, что делать. То же самое с печатью count - count не был определен вне функции, которая не вызывалась.

Если вы хотите использовать их вне функции, в конце функции вам нужно return count

Кроме того, в вашем цикле вы выполняете оператор count += 1, что означает count = count + 1, но вы не сказали ему, какой счет будет считаться в первый раз, поэтому он не знает, что он должен добавить к единице. Исправьте это, определив count = 0 перед циклом внутри функции.

И причина, по которой у вас есть бесконечный цикл, заключается в том, что ваше условие никогда не будет выполнено. Ваш код никогда не должен выполняться в течение часа, почти никогда. Не оставляйте его включенным только на час.

Вот какой-то альтернативный код. Однако убедитесь, что вы понимаете проблемы.

def main():

    file  = open('WorldSeriesWinners.txt', 'r').read()
    team  = input("Enter team name: ")
    count = file.count(team)

    print(count)

main()

Вы можете буквально поместить всю эту программу в одну строку:

print(open('WorldSeriesWinners.txt', 'r').read().count(input("Enter team name: ")))
person Charles Clayton    schedule 22.04.2014
comment
спасибо, а как считать фразу вроде (Новая папка) - person Jayank; 27.08.2020

Согласно документам: https://docs.python.org/3/library/io.html#io.IOBase.readline, readline возвращает одну строку, поэтому в вашей программе у вас есть бесконечный цикл с первой строкой файла

while lst != ''

Вы можете попробовать что-то вроде

for line in teams:
    if who in line:
        count += 1
person Andna    schedule 22.04.2014
comment
я инициализирую счет равным 0 в первой строке {count = 0} это неправильное размещение? я думал, что это лучше всего как глобальная переменная. - person Qwastic; 23.04.2014

Если вы не возражаете против нижнего или верхнего регистра, вы можете использовать эту модифицированную версию ответа @charles-clayton!

print(open('WorldSeriesWinners.txt', 'r').read().lower().count(input("Enter team name: ").lower()))
person Amir SHIRALI POUR    schedule 05.02.2021