Python类方法读取文件内容存入类变量失败,求实现及成本计算方案
解决方法
先说说你代码里的几个问题:
while True是死循环,文件读完后还会一直读空字符串,根本停不下来x_list、y_list是方法里的局部变量,方法执行完就没了,没法存成类/实例变量- 文件没正确关闭,容易搞出资源泄漏
- 读取逻辑没对应你说的文件结构(前三行是书籍数量、书名、价格)
下面是改好的代码,直接能用:
class Book: def __init__(self): print("类已创建") # 用实例变量存数据,整个类里都能访问 self.book_count = 0 self.books = [] # 存(书名, 价格)的列表 self.total_cost = 0 def load_data(self): fp = "book_file.txt" # 用with自动关文件,省得手动处理 with open(fp, "r", encoding="utf-8") as file: # 读第一行的书籍数量 first_line = file.readline().strip() if not first_line: print("文件是空的或者格式不对") return self.book_count = int(first_line) # 按数量读对应的书名和价格 for idx in range(self.book_count): title = file.readline().strip() if not title: print(f"第{idx+1}本书的书名没找到") break price_str = file.readline().strip() if not price_str: print(f"第{idx+1}本书的价格没找到") break try: price = float(price_str) except ValueError: print(f"第{idx+1}本书的价格格式错了:{price_str}") continue self.books.append((title, price)) self.total_cost += price # 输出结果 print(f"一共{self.book_count}本书") print("书籍详情:") for title, price in self.books: print(f"书名:{title},价格:{price}") print(f"总成本:{self.total_cost}") # 运行测试 b = Book() b.load_data()
关键改动说明
- 类名规范:把
book改成Book,符合Python的命名习惯 - 实例变量存数据:用
self.xxx代替局部变量,这样数据不会在方法结束后消失,其他方法也能调用 - 干掉死循环:用
for循环根据书籍数量控制读取次数,不会无限循环 - 安全读文件:
with语句会自动关闭文件,不用手动写file.close() - 加了数据校验:防止文件空行、格式错误导致程序崩掉
- 直接算成本:读价格的时候直接累加总成本,不用额外处理
示例文件内容(book_file.txt)
如果你的文件是这种格式(第一行是书籍总数,之后每两行是书名和价格):
2 Python编程从入门到精通 89.9 Java核心技术 129.0
运行后会输出:
类已创建 一共2本书 书籍详情: 书名:Python编程从入门到精通,价格:89.9 书名:Java核心技术,价格:129.0 总成本:218.9
要是你的文件前三行是购买数量、单本书名、单价(比如买5本《Python入门》,单价59.9),就用下面这个版本的load_data方法:
def load_data(self): fp = "book_file.txt" with open(fp, "r", encoding="utf-8") as file: # 读购买数量 count_str = file.readline().strip() if not count_str: print("文件格式错了:没找到购买数量") return try: self.purchase_count = int(count_str) except ValueError: print(f"购买数量格式不对:{count_str}") return # 读书名 self.book_title = file.readline().strip() if not self.book_title: print("文件格式错了:没找到书名") return # 读单价 price_str = file.readline().strip() if not price_str: print("文件格式错了:没找到单价") return try: self.unit_price = float(price_str) except ValueError: print(f"单价格式不对:{price_str}") return # 算总成本 self.total_cost = self.purchase_count * self.unit_price print(f"购买数量:{self.purchase_count}") print(f"书名:{self.book_title}") print(f"单价:{self.unit_price}") print(f"总成本:{self.total_cost}")
对应的文件内容:
5 Python编程入门 59.9
运行输出:
类已创建 购买数量:5 书名:Python编程入门 单价:59.9 总成本:299.5
内容的提问来源于stack exchange,提问作者Krishna Girish
相关产品推荐
相关产品推荐

