🐸

汇报

Python 基础python-architect-30-the-report
奖励: 150 XP
|

最终阶段:汇报 (The Report).

魔像已经完全运作正常。它能读取任务,安全执行,并在需要时充电。

现在,进行最后的测试:全流程模拟。 魔像必须执行列表中的所有任务,并将 汇报 写入文件。

主循环

我们需要一个方法 execute_all(self)。它应该:

  1. 写入模式 ("w") 打开 report.txt
  2. 遍历 self.tasks 中的每一个任务。
  3. 尝试运行 work()
  4. 将结果写入文件(例如:"Executed: Patrol\n")。
  5. 如果遇到 ValueError (低电量),写入 "Recharging...\n" 并重置能量。
    def execute_all(self):
      with open("report.txt", "w") as f:
          for task in self.tasks:
              try:
                  self.work()
                  f.write(f"Done: {task}\n")
              except ValueError:
                  f.write("Recharging...\n")
                  self.energy = 20
1
定义 execute_all

创建方法 execute_all(self)

2
打开文件

使用 with open("report.txt", "w") as f: 创建汇报文件。

3
处理任务

with 块中遍历 self.tasks。 尝试 work()。如果成功,写入 "Done: [task]" 到文件。

4
处理错误并记录

如果逻辑抛出 ValueError,写入 "Recharging..." 到文件,并充电至 20。

这就是终点!你将读取、写入、循环、异常处理和 OOP 状态管理结合到了一个系统中。这就是架构。

参考答案
点击展开
参考答案:
import random

class Golem:
  def __init__(self, name):
      self.name = name
      self.energy = 20
      self.tasks = []

  def work(self):
      loss = random.randint(5, 15)
      if self.energy < loss:
          raise ValueError("Low Battery!")
      self.energy -= loss
      # 我们这里不打印,保持输出整洁,你随意。

  def load_tasks(self, filename):
      with open(filename, 'r') as f:
          for line in f:
              self.tasks.append(line.strip())

  def execute_all(self):
      with open("report.txt", "w") as f:
          for task in self.tasks:
              try:
                  self.work()
                  f.write(f"Done: {task}\n")
                  print(f"Done: {task}")
              except ValueError:
                  f.write("Recharging...\n")
                  print("Recharging...")
                  self.energy = 20
                  
                  # 充电后重试任务!
                  self.work()
                  f.write(f"Done: {task}\n")
                  print(f"Done: {task}")

bob = Golem("Bob")
bob.load_tasks("tasks.txt")
bob.execute_all()
Loading...
终端输出
Terminal
Ready to run...