第五周讲list 和dictionary,感觉难度突然加大了,可能是信息量太多,也可能是我自己太菜鸟,幸好五一节放假可以消化一下。
# 画出多个小球,如果鼠标点在现有小球里面,就会消除小球
import simplegui
import math
W=450
H=300
R=15 # ball radius
ball_list=[]
ball=[W/2,H/2]
# event handlers
def distance(p,q):
return math.sqrt( (p[0]-q[0])**2+(p[1]-q[1])**2)
def click(pos):
remove=[]
for ball in ball_list:
if distance([ball[0],ball[1]],pos)<=R:
remove.append(ball)
print "remove:",remove
if remove==[]:
ball_list.append(pos)
print "ball_list:", ball_list
else:
for ball in remove:
ball_list.pop(ball_list.index(ball))
print "ball_list after pop:" ,ball_list
# draw canvas 画出多个小球
def draw(canvas):
for ball in ball_list:
canvas.draw_circle([ball[0],ball[1]], R,1,"Teal","Teal")
# create frame and regist event
frame=simplegui.create_frame("ballcontrol",W,H)
frame.set_mouseclick_handler(click) # 鼠标操作
frame.set_canvas_background("White")# 设置背景
frame.set_draw_handler(draw)
# start frame
frame.start()
# 任务管理器
import simplegui
#event handlers
tasks=[]
message="hello"
# handlers for buttons
def clear():
global tasks
tasks=[]
def new(task):
tasks.append(task)
def remove_num(tasknum):
n= int(tasknum)
if n>0 and n<=len(tasks):
tasks.pop(n-1)
def remove_name(taskname):
if taskname in tasks:
tasks.remove(taskname)
# draw canvas
def draw(canvas):
global message
for i in tasks:
message=str(tasks.index(i)+1)+". "+str(i)
pos=30*(tasks.index(i)+1)
canvas.draw_text(message,[20,pos],20,"Orange")
# create frame
frame=simplegui.create_frame("Task List",400,300)
frame.add_input("new task",new,200)
frame.add_input("remove task number",remove_num,200)
frame.add_input("remove task name",remove_name,200)
frame.add_button("clear all", clear)
frame.set_draw_handler(draw)
# start frame
frame.start()
# encode and decode 字典练习
import simplegui
import random
CI={}
LETTERS="abcdefghijklmnopqrstwvuxyzABCDEFGHIJKLMNOPQRSTWVUXYZ"
message=""
show="Please input a message" # 用show把内容显示在canvas上
# 制作一个简易字典
def init():
letter_list=list(LETTERS)
random.shuffle(letter_list)
for ch in LETTERS:
CI[ch]=letter_list.pop()
CI[" "]="1" # 添加空格元素
init() # call it
# encode button
def encode():
global show
emsg=""
for ch in message:
emsg += CI[ch]
show="encodes to:" +str(emsg)
# decode button
def decode():
global show
dmsg=""
for ch in message:
for key, value in CI.items():
if ch == value:
# 上面两行相当于
# for key in CI:
# if ch == CI[key]:
dmsg += key
show="decodes to:" +str(dmsg)
# update message input
def newmsg(msg):
global message
message=msg
label.set_text(msg)
# define draw handlers
def draw(canvas):
canvas.draw_text(show,[20,50],18,"Orange")
#create frame
frame=simplegui.create_frame("code",400,250)
frame.set_draw_handler(draw)
frame.add_input("message",newmsg,200)
frame.add_button("Encode",encode,200)
frame.add_button("Decode",decode,200)
label=frame.add_label("",200)
#start frame
frame.start()