pythoncamp0

第三个程序(猜数字自动化)

题目要求

  • 唯一作业:
    • 猜数游戏AI版
  • 期待:
    • 抽象你的自然思维
    • 在尽可能短的代码行数中完成:无人介入的猜数游戏
    • 最好能动画式演示游戏过程
  • 要求:
    • 基础: 用程序模拟出自己猜数的策略, 并进行检验
    • 可用: 用自制的猜数AI, 和自己的游戏对战
    • 合格: 猜数AI的游戏过程,可记录,可回放
    • 天才: 猜数AI的游戏过程,可记录,可回放,可分享,加载...进一步的:
      • 通过大量的游戏对战,统计自个儿AI 的能力?!
      • 发布他人的AI 也可以接入的服务?
      • 并行多组游戏?
      • 怎么证明自个儿的 AI 策略是最优的?能用最少次数猜中?
  • 教程期待:
    • 向 6个月 前看过以往自己教程的自己认真描述
    • 怎么设计代码来减少行数完成这个任务?
    • 有哪些理解上的坑,如何能理解之?
  • 一个非常有价值的隐藏任务:
    • 如何能自动化测试这种边界问题?
    • 以免反复出现?

解题思路

  • 猜数字游戏教程见第一节 第一个程序——猜数字
  • 猜数字策略——二分法
  • 自动化——将二分法生成的数字代替人机互动的输入的数字与随机数比较

    • 思考过程

      这里是否要设置timer?
      今天进行了尝试,有一个已经可用该如何同时添加多个timer?
      
  • 可记录、可回放——创建列表,timer。

基本框架

  • 创建模版(inport)
  • 创建框架等(frame/timer)
  • 注册事件(frame.set/frame.add)
  • 定义全局变量(global)
  • 调用事件(def)
  • 创建辅助函数
  • 开始(start Frame&Timer)

具体步骤

在“猜数字”游戏上进行修改

  • 注册新事件(用时30分钟)

    • 添加新的 button (逐步自动猜数字,全自动猜数字,回放 ai 战况等),根据需要添加新的 button 和 input。
  • def 新事件(用时1小时)

    • 示例

      “全自动猜数字”事件:

          def auto():
              if timer.is_running() :
                   timer.stop()
              else:
                   print "ai全自动猜数字:\n"
                   timer.start()    
      
  • timer (用时2小时)

    • 尝试了好几个 timer 的用法,没有完成。
  • debug (用时3小时+)

     详见 遇到并解决的问题
    

遇到并解决的问题

折腾过程:

详见代码库

[问题1]回放不是逐步的。
[问题2]该如何同时添加多个timer?
  • 思路是 ai 猜数字回放、手动猜数字过程回放、ai 自动猜数字各一个timer。
[问题3]上下限的数字被填入时的 bug。
  • Bug 已经解决,
  • 思考:如何能自动化测试这种边界问题? 以免反复出现?

问题解决:

[问题1]回放不是逐步的。

将 timer 中的 for 语句用 if 代替得已解决。

[问题2]该如何同时添加多个timer?
[问题3]边界的自动化测试。

Tips

  • 如何在代码中添加中文,有两种方法: ( 注意引号的位置。)
    • u"中文字符"——用于句中。
    • "中文字符\n"——用于句末,打印时自动添加一段空行。