用Python制作的幻灯片类型的作品,用来教Python元组启蒙的,还要学习几个常见的错误类型,以下是完整源代码。
本程序需要sprites模块支持,安装方法为在命令提示符下输入以下命令安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites --upgrade
1 """
2 第七课 元组与错误提示
3 """
4 from sprites import *
5
6 s = '第七课 元组与错误提示'
7 screen = Screen()
8 screen.bgcolor('blue')
9 screen.titlebar(False)
10 root = screen._root # 窗口对象
11 root.wm_attributes('-alpha',0.7) # 设置窗口为全透明(0到1.0)
12 screen.setup(800,700)
13
14 # 下面的代码让窗口可以拖动.
15 oldx = 0
16 oldy = 0
17 def startmove(event):
18 global oldx,oldy
19 oldx = event.x
20 oldy = event.y
21 def stopmove(event):
22 global oldx,oldy
23 oldx = 0
24 oldy = 0
25 def movewindow(event):
26 global oldx,oldy
27 dx = event.x - oldx
28 dy = event.y - oldy
29 root.move(dx,dy)
30 screen.cv.bind("<ButtonPress-2>", startmove)
31 screen.cv.bind("<ButtonRelease-2>", stopmove)
32 screen.cv.bind("<B2-Motion>",movewindow)
33
34 # 下面的代码按方向箭头则窗口能上下左右移动
35 screen.onkeypress(lambda:root.move(10),'Right')
36 screen.onkeypress(lambda:root.move(-10),'Left')
37 screen.onkeypress(lambda:root.move(0,-10),'Up')
38 screen.onkeypress(lambda:root.move(0,10),'Down')
39 screen.listen()
40
41 ft = ('楷体',38,'bold')
42 t = Sprite(visible=False,pos=(-500,0))
43 t.color('magenta')
44 clock = Clock()
45 for x in range(110):
46 t.clear()
47 t.write(s,align='center',font=ft)
48 t.wait()
49 t.fd(5)
50 clock.tick(60)
51
52 m1 = Mouse() # 鼠标左键
53 while not m1.down():screen.update()
54
55 for x in range(50):
56 t.clear()
57 t.write(s,align='center',font=ft)
58 t.wait()
59 t.fd(10)
60 clock.tick(60)
61
62 #以下是显示学习的内容段
63 studycontent = """
64 主要学习内容
65
66 1、元组的概念
67
68 2、元组的索引
69
70 3、语法错误
71
72 4、名字错误
73
74 5、类型错误
75
76 6、索引错误
77
78 7、练习与作业
79 """
80 t.color('white')
81 t.clear()
82 t.sety(-260) # 这里修改菜单的显示y坐标
83 ft = ('楷体',24,'bold')
84 s = studycontent
85 while not m1.down():screen.update()
86 # 下面的代码显示主菜单
87 for x in range(110):
88 t.clear()
89 t.write(s,align='center',font=ft)
90 t.wait()
91 t.bk(5)
92 clock.tick(60)
93
94 def slow_write(t,string):
95 """
96 t:角色,string:要显示的字
97 本函数慢慢的显示字。
98 """
99 string = string.split('\n') # 换成列表
100 oldxy = t.position() # 记录老的坐标
101 t.goto(-340,310) # 到新的坐标
102 for line in string: # 每一行字
103 for char in line: # 每一个字符
104 t.write(char,align='center',font=ft)
105 t.wait(0.2)
106 cd = len(bytes(char,'gb2312'))
107 if cd == 1:
108 t.addx(20)
109 else:
110 t.addx(30)
111 t.setx(-336)
112 t.addy(-50)
113 t.goto(oldxy)
114
115 s1 = """
116 1、元组的概念
117
118 元组是以小括号封闭的,以逗号隔开的,有顺序的,
119 不可变的数据集合。英文名为tuple。
120 它是一种固定的组合,一旦元组中的数据确定了,
121 那么我们就不能往里面添加,删除与修改数据。
122 定义一个空元组可以直接输入(),也可以用tuple命令,
123 如xy=tuple()会返回一个名为xy的空元组。
124 新建一个只有一个数据的元组,要在这个数据后面加逗号。
125 如,(3,)是一个只有一个数据的元组。
126 type查看元组的结果为<class 'tuple'>
127 """
128 def press1():
129 t.clear()
130 slow_write(t,s1)
131 while not m1.down():screen.update()
132 t.clear()
133 t.write(s,align='center',font=ft)
134 screen.onkeypress(press1,'1')
135
136
137 s2 = """
138 2、元组的索引
139
140 元组和列表一样,要访问元组中的每个数据
141 也是通过索引号进行的。
142 假设有一个元组叫cors=(32,76),那么我们可
143 以通过cors[0]访问它的第一个数据,
144 通过cors[-1]访问它的最后一个数据,
145 但是不能给它们赋值。
146 如果试图修改cors[0]的值,那么就会显示类型错误。
147 即cors[0]=77这样的式子是会出错的。
148 """
149 def press2():
150 t.clear()
151 slow_write(t,s2)
152 while not m1.down():screen.update()
153 t.clear()
154 t.write(s,align='center',font=ft)
155 screen.onkeypress(press2,'2')
156
157
158 s3 = """
159 3、语法错误
160
161 当我们输入代码的时候,不小心可能会出现了语法方面
162 的错误。Python就会显示语法错误。
163 如输入print(32),那么就会出错语法错误。它的英文
164 提示字符串为:
165 SyntaxError: invalid character in identifier
166 这个错误是由于前半部分小括号输入错误,应该输入
167 半角小括号。
168 """
169 def press3():
170 t.clear()
171 slow_write(t,s3)
172 while not m1.down():screen.update()
173 t.clear()
174 t.write(s,align='center',font=ft)
175 screen.onkeypress(press3,'3')
176
177
178 s4 = """
179 4、名字错误
180
181 当我们使用了一个没有定义的‘变量’时,就会出现
182 这个错误。假设并没有叫x的变量,当用print打印它
183 时就会显示以下的字符。
184 NameError: name 'x' is not defined
185 意思是名字错误:名字'x'没有被定义。
186 """
187 def press4():
188 t.clear()
189 slow_write(t,s4)
190 while not m1.down():screen.update()
191 t.clear()
192 t.write(s,align='center',font=ft)
193 screen.onkeypress(press4,'4')
194
195
196 s5 = """
197 5、类型错误
198
199 当某种数据不支持某种操作时,就会出现类型错误。
200 典型的如,元组不支持修改数据。
201 那么试图修改它里面的数据的时候就会现出类型错误。
202 假设有一个元组叫colors,它的值如下所示:
203 ('red','bule','cyan'),
204 那么输入colors[1]='black'就会显示类型错误。
205 英文为:
206 TypeError: 'tuple' object does not
207 support item assignment
208 上面的意思是类型错误:‘元组’对象不支持项目赋值。
209 """
210 def press5():
211 t.clear()
212 slow_write(t,s5)
213 while not m1.down():screen.update()
214 t.clear()
215 t.write(s,align='center',font=ft)
216 screen.onkeypress(press5,'5')
217
218 s6 = """
219 6、索引错误
220
221 当使用超出范围的索引号时,就会出现这个错误。
222 假设有颜色表为:
223 colors=['red','bule','cyan'],由于colors列表
224 最大的索引号为2,那么打印colors[5]的时候就会
225 出现索引错误。它的英文提示为:
226 IndexError: list index out of range
227 意思就是索引错误:列表索引超出范围。
228 """
229 def press6():
230 t.clear()
231 slow_write(t,s6)
232 while not m1.down():screen.update()
233 t.clear()
234 t.write(s,align='center',font=ft)
235 screen.onkeypress(press6,'6')
236
237 s7 = """
238 7、练习与作业
239
240 ① 说出列表和元组的区别。
241 ② ('abcd')这个数据是什么类型?
242 ③ 把总结的四种类型提示里的英文单词放在一个元组中。
243 ④ tuple命令不仅能新建空元组,也能在它的小括号里
244 加上字符串或列表。尝试下面的用法:
245 tuple('风火轮编程')和
246 tuple([32,76,8])。
247 说说tuple这个时候起了什么作用?
248 """
249 def press7():
250 t.clear()
251 slow_write(t,s7)
252 while not m1.down():screen.update()
253 t.clear()
254 t.write(s,align='center',font=ft)
255 screen.onkeypress(press7,'7')
256
257
258
259 byebye = """
260 下次再见!
261 """
262 def pressq():
263 t.clear()
264 t.color('cyan')
265 t.home()
266 t.write(byebye,align='center',font=('宋体',38,'bold'))
267 while not m1.down():screen.update()
268 screen.bye()
269 screen.onkeypress(pressq,'q')
270
271
272 screen.mainloop()