You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键改动说明

  1. 类名规范:把book改成Book,符合Python的命名习惯
  2. 实例变量存数据:用self.xxx代替局部变量,这样数据不会在方法结束后消失,其他方法也能调用
  3. 干掉死循环:用for循环根据书籍数量控制读取次数,不会无限循环
  4. 安全读文件:with语句会自动关闭文件,不用手动写file.close()
  5. 加了数据校验:防止文件空行、格式错误导致程序崩掉
  6. 直接算成本:读价格的时候直接累加总成本,不用额外处理

示例文件内容(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:15:58