之前猜数游戏已实现手动猜数功能。AI版需要增加:
复习前面的作业,增加frame.set_draw_handler(draw)
和 draw(canvas)函数。
先默认生成10内随机数作为神秘数,方便测试
拆分函数
拆分成两个函数:
compare()问题
尝试:找啊找啊找啊找,发现没有定义最大值最小值为全局变量
def compare():
global secret_number,guess_number,num_max,num_min,result
guess_number = ai_num()
print "Your guess was: ",guess_number
if secret_number > guess_number :
result = 'low'
num_min = guess_number # set the new min
elif secret_number < guess_number :
result = 'high'
num_max = guess_number # set the new max
else:
result = 'bingo'
return result
ai_num()问题
问题:问题出在
def ai_num():
global num_max,num_min
newAI = (num_max - num_min)/2
return newAI
用错了减法,应该用加法,多么痛的领悟!算法很重要啊。
尝试:修改 newAI 的公式,问题解决。
guess_list = []
guess_list.append(newAI)
guess_list = []
pop from empty list
尝试:用 for 循环 pop list
for i in range(len(guess_list))
guess_list.pop()
提示invalid syntax
pop index out of range
增加timer,写 timer handler,需要增加计数器记录猜数的次数
尝试:
if step < guess_time :
for i in range(0,step):
guess_list.append(done_list)
step += 1
else:
step = 0
AI数
统计
问题:哪些东西应该放到一个类里面实现?也就是说,类应该如何划分?
class Character:
def __init__(self, name, initial_health): # __int__ 初始化对象
self.name = name # self 是新的对象的引用
self.health = initial_health # name 和 health 是self对象中的域(field)
self.inventory = []
def __str__(self):
s = "Name: " + self.name
s += " Health: " + str(self.health)
s += " Inventory: " + str(self.inventory)
return s
def grab(self, item): # methond defines the behaviors of objects
self.inventory.append(item)
def get_health(self): # method 所有方法的第一个参数都是self
return self.health
类和函数的区别在于,类只能操作某个类型的对象,而不能通过其他方法直接被调用。每一个类都包含属性(变量和值)和行为(函数)。
面向对象编程的强大之处,对于一个类,理解其接口和已实现的方法,就可以使用了。