我学到了一点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 CSC111 A
2018S MAT101 B +
我不知道如何改进我的代码。
答案 0 :(得分:3)
您的问题出在此代码段中:
line = file.readline().strip()
while line != 0:
line
永远不会是== 0
,因为它是一个字符串,而0
是一个整数。它们永远不会在python中比较相等,所以你的循环永远重复。此外,您不会在循环内部执行任何操作来更改line
变量的值。它将永远保持在循环开始之前分配的第一个值,条件永远不会改变。
答案 1 :(得分:1)
虽然可以使用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()
答案 2 :(得分:0)
这是编写无限循环的经典示例。
创建while循环的三个必要组件是
你有前两部分。但是,行:
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