如何确定为什么我的Python代码需要无限的时间来运行

2024-10-01 05:00:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我学了一点OOP和文件I/O,我试图通过编写自己的代码将它们应用到现实生活中。但不幸的是,它没有运行。Python从不说有错误。它只是整天执行命令并说请等待结果。你知道吗

这是我的密码:

class CoursesTaken():

    def __init__(self):
        self._courses = []

    def read_file(self, file):
        line = file.readline().strip()
        while line != 0:
            course = tuple(line.split())
            self._courses.append(course)

    def add_course(self, season, code, gpa):
        self._course = (season, code, gpa)
        self._courses.append(self._course)

    def total_courses(self):
        return self._courses

    def name_of_total_courses(self):
        result = []
        for i in self._courses:
            name = i[1]
            result.append(name)
        return result


if __name__ == '__main__':
    file = open('courses.txt')
    courses = CoursesTaken()
    courses.read_file(file)
    print(courses.name_of_total_courses)
    file.close()

txt文件的格式如下:

2018S CSC11A型

2018S MAT101 B+

我不知道如何改进我的代码。你知道吗


Tags: 文件代码nameselfreaddeflineresult
3条回答

这是一个编写无限循环的经典示例。你知道吗

创建while循环所必需的三个组件是

  1. 比较
  2. 代码正文
  3. 更新比较变量

你有前两部分。但是,行:

line = file.readline().strip()

在你的while循环之外。这条线永远都是你分配给它的第一条线。解决这个问题最简单的方法是添加另一个

line = file.readline().strip()
while line != 0:
    course = tuple(line.split())
    self._courses.append(course)
    line = file.readline().strip()

正如@nosklo所说:执行while循环的正确方法不是将其与零进行比较。我通常更喜欢

while line:
    # code

虽然可以使用while循环和对readline的显式调用来迭代文件的内容,但没有理由这样做。你知道吗

def read_file(self, file):
    for line in file:
        line = line.strip()
        course = tuple(line.split())
        self._courses.append(course)

可以进一步浓缩:

def read_file(self, file):
    self._courses.extend(tuple(line.strip().split()) for line in file)

如果选择使用while循环,则负责在每次迭代中调用readline一次,以获取换行符,直到它返回空字符串为止。你知道吗

def read_file(self, file):
    line = file.readline().strip()
    while line != "":
        self._courses.append(tuple(line.split()))
        line = file.readline().strip()

您的问题在以下代码段中:

line = file.readline().strip()
while line != 0:

line永远不会是== 0,因为它是字符串,0是整数。它们在python中永远不会相等,因此循环将永远重复。此外,在循环中不做任何更改line变量的值的操作。它将永远保持循环开始前分配的第一个值,条件永远不会改变。你知道吗

相关问题 更多 >