我创建了一个while循环来遍历,读取数据.txt文件,计算周长/面积/顶点,根将打印出答案。在
我被困在这里:
from Polygon import Polygon
from Rectangle import Rectangle
in_file = open('data.txt', 'r')
line = in_file.readlines()
while line:
type_, num_of_sides = line.split( ) ###ERROR 'list' object has no attribute 'split'
sides = [map(float, in_file.readline().split()) for _ in range(int(num_of_sides))]
print(line)
if type_ == 'P':
poly_object = Polygon(sides)
elif type_ == 'R':
poly_object = Rectangle(sides)
print('The vertices are {}'.format(poly_object.vertices))
print('The perimeter is {}'.format(poly_object.perimeter()))
print('The area is {}'.format(poly_object.area()))
print()
line = in_file.readline()
in_file.close()
既然readlines
是一个字符串列表,并且我希望分割读取每一行,我是否应该创建一个循环遍历的for
循环?或者它只是我选择格式化的方式,所以我得到了一个错误的原因?在
当前的问题是使用
readlines
,而不是line = in_file.readlines()
中的readline
。这将用文件中所有行的列表填充line
,而不是一行。这将导致程序出现两个问题,错误类型的数据将通过循环传播:while line
,将导致执行循环,因为非空列表的计算结果为true。在line
上调用split
。在循环的第一次迭代中,line
包含一个字符串列表(其中每个字符串都是文件中的一行)。列表没有split
方法-只有单个字符串有。此呼叫失败。在split
的调用没有失败,并且允许循环运行一次,那么对line = in_file.readline()
的后续调用将不会返回文件中的下一行,因为之前对readlines
的调用已经读取了所有行,并且在EOF的中间时间段内光标没有重置。循环将终止。在如果在步骤3中没有最后一次调用,那么循环将永远运行而不终止,因为
line
的值永远不会更新为非空列表。在一个最小的变化是调整初始调用,它将一个值赋给},以确保只从文件中读取一行。然后代码中的逻辑应该可以工作。在
line
变量给readline()
,而不是{您可能会发现以下实现逻辑更容易实现,并说明原因:
in_file
读取的机器,在循环之前,使用上下文管理器自动关闭文件for
循环就足以遍历它相关问题 更多 >
编程相关推荐