用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 ft = ('楷体',38,'bold')
15 t = Sprite(visible=False,pos=(-500,0))
16 t.color('magenta')
17 clock = Clock()
18 for x in range(110):
19 t.clear()
20 t.write(s,align='center',font=ft)
21 t.wait()
22 t.fd(5)
23 clock.tick(60)
24
25 m1 = Mouse() # 鼠标左键
26 while not m1.down():screen.update()
27
28 for x in range(50):
29 t.clear()
30 t.write(s,align='center',font=ft)
31 t.wait()
32 t.fd(10)
33 clock.tick(60)
34
35 #以下是显示学习的内容段
36 studycontent = """
37 主要学习内容
38
39 1、字符串的概念
40
41 2、转义字符
42
43 3、len命令
44
45 4、str的加法和乘法
46
47 5、字符串的索引
48
49 6、索引错误
50
51 7、字符串的不可变性
52 """
53 t.color('white')
54 t.clear()
55 t.sety(-300) # 这里修改菜单的显示y坐标
56 ft = ('楷体',24,'bold')
57 s = studycontent
58 while not m1.down():screen.update()
59 # 下面的代码显示主菜单
60 for x in range(110):
61 t.clear()
62 t.write(s,align='center',font=ft)
63 t.wait()
64 t.bk(5)
65 clock.tick(60)
66
67 screen.listen()
68
69 def slow_write(t,string):
70 """
71 t:角色,string:要显示的字
72 本函数慢慢的显示字。
73 """
74 string = string.split('\n') # 换成列表
75 oldxy = t.position() # 记录老的坐标
76 t.goto(-340,310) # 到新的坐标
77 for line in string: # 每一行字
78 for char in line: # 每一个字符
79 t.write(char,align='center',font=ft)
80 t.wait(0.2)
81 cd = len(bytes(char,'gb2312'))
82 if cd == 1:
83 t.addx(20)
84 else:
85 t.addx(30)
86 t.setx(-336)
87 t.addy(-50)
88 t.goto(oldxy)
89
90 s1 = """
91 1、字符串的概念
92 在Python中,字符串是用引号封闭的一些字符。
93 用成对的双引号,单引号,或三引号封闭一些字
94 符时都可以定义字符串。当然,我们可以把它
95 赋值给一个变量。
96 如 s='red',或者 c="yellow"都是定义字符串。
97 用三引号封闭的话,在定义时可以直接敲回车。
98 当输入type('a')时,会显示<class 'str'>。
99 str是英文string的前三个字母,它就是字符串的意思
100 (单击返回主菜单)
101 """
102 def press1():
103 t.clear()
104 slow_write(t,s1)
105 while not m1.down():screen.update()
106 t.clear()
107 t.write(s,align='center',font=ft)
108 screen.onkeypress(press1,'1')
109
110
111 s2 = """
112 2、转义字符
113 在计算机里,有些字符是看不见的,
114 如换行符写做\'\\n\'。
115 当我们按键盘上的Tab键的时候,
116 在文本框里会表现为跳一格。
117 这就是在输入制表符,它写做\'\\t\'。
118 当我们敲回车键时,就是输入回车符号,它写做\'\\r\'。
119 那么,当我们要输入反斜杠本身时,要怎么输入呢?
120 我们可以输入\'\\\\\'。来表示一个反斜杠。
121 当我们用三引号定义字符串,并且在输入字符的时候
122 敲了回车时,Python会自动帮我们加上换行符
123 而不是回车符。(单击返回主菜单)
124 """
125 def press2():
126 t.clear()
127 slow_write(t,s2)
128 while not m1.down():screen.update()
129 t.clear()
130 t.write(s,align='center',font=ft)
131 screen.onkeypress(press2,'2')
132
133
134 s3 = """
135 3、len命令
136 len是求字符串中字符个数的命令。
137 语法:len(字符串)。
138 如len('风火轮编程')的结果是5。
139 len(\'\\n\')的结果是1,这是由于\'\\n\'表示是一个换行符。
140 len('') 的结果是0,这是由于''是空字符串。
141 (单击返回主菜单)
142 """
143 def press3():
144 t.clear()
145 slow_write(t,s3)
146 while not m1.down():screen.update()
147 t.clear()
148 t.write(s,align='center',font=ft)
149 screen.onkeypress(press3,'3')
150
151
152 s4 = """
153 4、str的加法和乘法
154 连接字符串用加号即可。如'ab' + 'cd'
155 字符串可以乘以一个整数,它会把字符串
156 重复一定的次数。如len('风火轮编程'*3)
157 的结果是15。(单击返回主菜单)
158 """
159 def press4():
160 t.clear()
161 slow_write(t,s4)
162 while not m1.down():screen.update()
163 t.clear()
164 t.write(s,align='center',font=ft)
165 screen.onkeypress(press4,'4')
166
167
168 s5 = """
169 5、字符串的索引
170 字符串中的每个字符有编号,从左到右数,
171 编号从0开始的,这个编号叫做索引号。
172 我们可以通过索引号访问字符串中的字符。
173 方法:字符串名称[index],其中index表示索引号。
174 假设有字符串s='abcdefg',那么s[0]就是'a',
175 s[3]就是'd'。
176 在字符串中,索引号也可以从右到左数。
177 这个时候索引号是从-1开始。也就是说s[-1]
178 表示倒数第一个字符,s[-2]表示倒数第二个字符,
179 依此类推。(单击返回主菜单)
180 """
181 def press5():
182 t.clear()
183 slow_write(t,s5)
184 while not m1.down():screen.update()
185 t.clear()
186 t.write(s,align='center',font=ft)
187 screen.onkeypress(press5,'5')
188
189 s6 = """
190 6、索引错误
191 字符串中的字符是有一定数量的,也就是说
192 索引号肯定有一定范围。假设有 s='abcdefg',
193 那么它的索引号是从0到6。
194 如果输入s[7]会怎么样呢,这个时候就会提示错误。
195 这个错误叫indexError,即索引错误。
196 我们实践一下索引错误。(单击返回主菜单)
197 """
198 def press6():
199 t.clear()
200 slow_write(t,s6)
201 while not m1.down():screen.update()
202 t.clear()
203 t.write(s,align='center',font=ft)
204 screen.onkeypress(press6,'6')
205
206 s7 = """
207 7、字符串的不可变性
208 字符串有一个特性就是它是不可变的。
209 主要表现为,我们可以通过索引号访问它的某个
210 字符,但不能修改它。假设有s='abcdefg',
211 那么让s[0]='风'是不可以的,这是会出错的。
212 (单击返回主菜单)
213 """
214 def press7():
215 t.clear()
216 slow_write(t,s7)
217 while not m1.down():screen.update()
218 t.clear()
219 t.write(s,align='center',font=ft)
220 screen.onkeypress(press7,'7')
221
222
223
224 byebye = """
225 下次再见!
226 """
227 def pressq():
228 t.clear()
229 t.color('cyan')
230 t.home()
231 t.write(byebye,align='center',font=('宋体',38,'bold'))
232 while not m1.down():screen.update()
233 screen.bye()
234 screen.onkeypress(pressq,'q')
235
236 # 下面的代码让窗口可以拖动.
237 oldx = 0
238 oldy = 0
239 def startmove(event):
240 global oldx,oldy
241 oldx = event.x
242 oldy = event.y
243 def stopmove(event):
244 global oldx,oldy
245 oldx = 0
246 oldy = 0
247 def movewindow(event):
248 global oldx,oldy
249 dx = event.x - oldx
250 dy = event.y - oldy
251 root.move(dx,dy)
252 screen.cv.bind("<ButtonPress-2>", startmove)
253 screen.cv.bind("<ButtonRelease-2>", stopmove)
254 screen.cv.bind("<B2-Motion>",movewindow)
255 screen.mainloop()