用Python制作的幻灯片类型的作品,用来教Python元组启蒙的,还要学习几个常见的错误类型,以下是完整源代码。
本程序需要sprites模块支持,安装方法为在命令提示符下输入以下命令安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites --upgrade
"""
第七课 元组与错误提示
"""
from sprites import *
s = '第七课 元组与错误提示'
screen = Screen()
screen.bgcolor('blue')
screen.titlebar(False)
root = screen._root # 窗口对象
root.wm_attributes('-alpha',0.7) # 设置窗口为全透明(0到1.0)
screen.setup(800,700)
# 下面的代码让窗口可以拖动.
oldx = 0
oldy = 0
def startmove(event):
global oldx,oldy
oldx = event.x
oldy = event.y
def stopmove(event):
global oldx,oldy
oldx = 0
oldy = 0
def movewindow(event):
global oldx,oldy
dx = event.x - oldx
dy = event.y - oldy
root.move(dx,dy)
screen.cv.bind("<ButtonPress-2>", startmove)
screen.cv.bind("<ButtonRelease-2>", stopmove)
screen.cv.bind("<B2-Motion>",movewindow)
# 下面的代码按方向箭头则窗口能上下左右移动
screen.onkeypress(lambda:root.move(10),'Right')
screen.onkeypress(lambda:root.move(-10),'Left')
screen.onkeypress(lambda:root.move(0,-10),'Up')
screen.onkeypress(lambda:root.move(0,10),'Down')
screen.listen()
ft = ('楷体',38,'bold')
t = Sprite(visible=False,pos=(-500,0))
t.color('magenta')
clock = Clock()
for x in range(110):
t.clear()
t.write(s,align='center',font=ft)
t.wait()
t.fd(5)
clock.tick(60)
m1 = Mouse() # 鼠标左键
while not m1.down():screen.update()
for x in range(50):
t.clear()
t.write(s,align='center',font=ft)
t.wait()
t.fd(10)
clock.tick(60)
#以下是显示学习的内容段
studycontent = """
主要学习内容
1、元组的概念
2、元组的索引
3、语法错误
4、名字错误
5、类型错误
6、索引错误
7、练习与作业
"""
t.color('white')
t.clear()
t.sety(-260) # 这里修改菜单的显示y坐标
ft = ('楷体',24,'bold')
s = studycontent
while not m1.down():screen.update()
# 下面的代码显示主菜单
for x in range(110):
t.clear()
t.write(s,align='center',font=ft)
t.wait()
t.bk(5)
clock.tick(60)
def slow_write(t,string):
"""
t:角色,string:要显示的字
本函数慢慢的显示字。
"""
string = string.split('\n') # 换成列表
oldxy = t.position() # 记录老的坐标
t.goto(-340,310) # 到新的坐标
for line in string: # 每一行字
for char in line: # 每一个字符
t.write(char,align='center',font=ft)
t.wait(0.2)
cd = len(bytes(char,'gb2312'))
if cd == 1:
t.addx(20)
else:
t.addx(30)
t.setx(-336)
t.addy(-50)
t.goto(oldxy)
s1 = """
1、元组的概念
元组是以小括号封闭的,以逗号隔开的,有顺序的,
不可变的数据集合。英文名为tuple。
它是一种固定的组合,一旦元组中的数据确定了,
那么我们就不能往里面添加,删除与修改数据。
定义一个空元组可以直接输入(),也可以用tuple命令,
如xy=tuple()会返回一个名为xy的空元组。
新建一个只有一个数据的元组,要在这个数据后面加逗号。
如,(3,)是一个只有一个数据的元组。
type查看元组的结果为<class 'tuple'>
"""
def press1():
t.clear()
slow_write(t,s1)
while not m1.down():screen.update()
t.clear()
t.write(s,align='center',font=ft)
screen.onkeypress(press1,'1')
s2 = """
2、元组的索引
元组和列表一样,要访问元组中的每个数据
也是通过索引号进行的。
假设有一个元组叫cors=(32,76),那么我们可
以通过cors[0]访问它的第一个数据,
通过cors[-1]访问它的最后一个数据,
但是不能给它们赋值。
如果试图修改cors[0]的值,那么就会显示类型错误。
即cors[0]=77这样的式子是会出错的。
"""
def press2():
t.clear()
slow_write(t,s2)
while not m1.down():screen.update()
t.clear()
t.write(s,align='center',font=ft)
screen.onkeypress(press2,'2')
s3 = """
3、语法错误
当我们输入代码的时候,不小心可能会出现了语法方面
的错误。Python就会显示语法错误。
如输入print(32),那么就会出错语法错误。它的英文
提示字符串为:
SyntaxError: invalid character in identifier
这个错误是由于前半部分小括号输入错误,应该输入
半角小括号。
"""
def press3():
t.clear()
slow_write(t,s3)
while not m1.down():screen.update()
t.clear()
t.write(s,align='center',font=ft)
screen.onkeypress(press3,'3')
s4 = """
4、名字错误
当我们使用了一个没有定义的‘变量’时,就会出现
这个错误。假设并没有叫x的变量,当用print打印它
时就会显示以下的字符。
NameError: name 'x' is not defined
意思是名字错误:名字'x'没有被定义。
"""
def press4():
t.clear()
slow_write(t,s4)
while not m1.down():screen.update()
t.clear()
t.write(s,align='center',font=ft)
screen.onkeypress(press4,'4')
s5 = """
5、类型错误
当某种数据不支持某种操作时,就会出现类型错误。
典型的如,元组不支持修改数据。
那么试图修改它里面的数据的时候就会现出类型错误。
假设有一个元组叫colors,它的值如下所示:
('red','bule','cyan'),
那么输入colors[1]='black'就会显示类型错误。
英文为:
TypeError: 'tuple' object does not
support item assignment
上面的意思是类型错误:‘元组’对象不支持项目赋值。
"""
def press5():
t.clear()
slow_write(t,s5)
while not m1.down():screen.update()
t.clear()
t.write(s,align='center',font=ft)
screen.onkeypress(press5,'5')
s6 = """
6、索引错误
当使用超出范围的索引号时,就会出现这个错误。
假设有颜色表为:
colors=['red','bule','cyan'],由于colors列表
最大的索引号为2,那么打印colors[5]的时候就会
出现索引错误。它的英文提示为:
IndexError: list index out of range
意思就是索引错误:列表索引超出范围。
"""
def press6():
t.clear()
slow_write(t,s6)
while not m1.down():screen.update()
t.clear()
t.write(s,align='center',font=ft)
screen.onkeypress(press6,'6')
s7 = """
7、练习与作业
① 说出列表和元组的区别。
② ('abcd')这个数据是什么类型?
③ 把总结的四种类型提示里的英文单词放在一个元组中。
④ tuple命令不仅能新建空元组,也能在它的小括号里
加上字符串或列表。尝试下面的用法:
tuple('风火轮编程')和
tuple([32,76,8])。
说说tuple这个时候起了什么作用?
"""
def press7():
t.clear()
slow_write(t,s7)
while not m1.down():screen.update()
t.clear()
t.write(s,align='center',font=ft)
screen.onkeypress(press7,'7')
byebye = """
下次再见!
"""
def pressq():
t.clear()
t.color('cyan')
t.home()
t.write(byebye,align='center',font=('宋体',38,'bold'))
while not m1.down():screen.update()
screen.bye()
screen.onkeypress(pressq,'q')
screen.mainloop()
更多python源代码,请打开李兴球博客www.lixingqiu.com