5

我正在为我正在上课的课程编写一个“简单”的小程序。这应该问我要搜索哪个团队,然后返回它在 .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()
4

3 回答 3

13

您无需手动检查文件计数行。您可以使用.read()

count = lst.count(who)

另一个问题是你在函数teams.close()之外调用print(count)

这意味着他们会在您调用 main 之前尝试执行,并且您正在尝试关闭尚未打开或定义的“团队”,因此您的代码不知道该做什么。打印计数也是如此 - 尚未在函数之外定义计数,尚未调用该函数。

如果你想在函数之外使用它们,你需要在函数结束时return count

此外,在您的循环中,您正在执行表示 的语句count += 1count = 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: ")))
于 2014-04-22T23:55:30.773 回答
0

根据文档:https://docs.python.org/3/library/io.html#io.IOBase.readlinereadline返回单行,所以在你的程序中你有文件第一行的无限循环

while lst != ''

你可以尝试类似的东西

for line in teams:
    if who in line:
        count += 1
于 2014-04-22T23:51:49.883 回答
0

如果你不介意小写或大写,你可以使用这个修改版的@charles-clayton 回复!

print(open('WorldSeriesWinners.txt', 'r').read().lower().count(input("Enter team name: ").lower()))
于 2021-02-05T13:47:49.217 回答