ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ### 课前准确: * 在`Windows`系统里安装`python`,参考 [安装python](https://www.kancloud.cn/k12edu/k_12/785427#Windowspython_4) ***** ### 本节课参考书目 * `Teach Your Kids to Code.pdf` 第四章:有趣的循环 ***** ### 用笨方法画画 例如我们画一个花瓣。 ![](https://box.kancloud.cn/7ce310c2fb27b1ddd67984589e0b5c64_645x486.png) 笨方法如下: ``` >>> import turtle # 第1句:导入 turtle 画图工具 >>> t = turtle.Pen() # 第2句:打开一个画图板 >>> t.circle(100) # 第3句:画一个半径为 100 的圆圈 >>> t.left(90) # 第4句:将画笔转动90度 >>> t.circle(100) # 第5句:画一个半径为 100 的圆圈 >>> t.left(90) # 第6句:将画笔转动90度 >>> t.circle(100) # 第7句:画一个半径为 100 的圆圈 >>> t.left(90) # 第8句:将画笔转动90度 >>> t.circle(100) # 第9句:画一个半径为 100 的圆圈 >>> t.left(90) # 第10句:将画笔转动90度 ``` 这段代码中,反复出现的代码是: ``` >>> t.circle(100) >>> t.left(90) ``` ***** ### 使用“循环”画画 我们改一下上面的代码: ``` >>> import turtle >>> t = turtle.Pen() >>> for x in range(4): t.circle(100) t.left(90) ``` 通过引入“循环”把代码量从10句减少至5句,这是很可观的进步。 解释一下“循环”代码的结构: 1. ` for x in range(4):` ,对于所有的`循环` 而言,这句都是类似的。 2. `range(4)` 表示一段数字范围,从 0 开始,连续 4 个数字,就是 0 , 1, 2,3 。这里表示我们想反复执行某些代码的数次,想执行 4次,就写`range(4)` ,如果想执行 7次,就写`range(7)` 。 3. 剩下的两句代码`t.circle(100)` 和`t.left(90)` ,是我们希望计算机反复执行的部分。 ***** ### 引入变量简化“循环” 我们改下程序,再增加两个花瓣: ``` >>> for x in range(6): t.circle(100) t.left(60) ``` 这里有两个地方发生了变化,一个是`range(4)` 变成了`range(6)` , 另一个是`t.left(90)` 变成了`t.left(60)` 。变成 `range(6)` 是因为,我们要画6个花瓣。 变成 `t.left(60)` 是因为,原先 4个花瓣的时候,花瓣之间的夹角是90度,6个花瓣的时候,花瓣之间的夹角是60度。 我们可以在程序中加一个变量`number_of_circles`,告诉计算机我们想画几个花瓣,这样就不用每次修改“循环”里的`range(.)` 和`t.left(.)` 。 ``` import turtle t = turtle.Pen() number_of_circles = int(turtle.numinput("画圈圈","你想画几个圆圈",6)) for x in range(number_of_circles): t.circle(100) t.left(360/number_of_circles) ``` 我们可以让这段代码更复杂一些: ``` import turtle t = turtle.Pen() turtle.bgcolor("black") number_of_circles = int(turtle.numinput("画圈圈","你想画几个圆圈",6)) for x in range(number_of_circles): t.pencolor("red") t.circle(100) t.pencolor("yellow") t.circle(50) t.left(360/number_of_circles) ``` ***** ### 在“循环”中加入控制 有时候,我们希望在“循环”的外边再加上一些控制语句,这些控制语句的格式是: ``` while 条件: 要执行的代码 ``` 例如,我们希望计算机做这样一些事情: 1. 告诉计算机一个名字; 2. 计算机把这个名字打印 100次; 3. 重复步骤1~2; 4. 如果计算机没有再收到新的名字,就自动退出程序。 ``` # 告诉计算机一个名字 name = input("What is your name? ") # 一直打印名字,直到触发某个条件退出 while name != "": # 打印名字100次 for x in range(100): print(name, end = " ") print() # 输入一个新的名字, 或者按 [ENTER] 退出 name = input("输入另外一个名字,或者按 [ENTER] 退出: ") print("Bye!") ``` ***** ### 引入空列表变量和增加变量元素 我们可以通过`while 条件:` 来控制列表变量的内容。下面这段代码中,分别定义了一个空列表变量`family` 和一个名字变量 `name` ,并通过控制条件`while name != "":` 和`family.append(name)` 调整`family` 的内容。 ``` family = [] name = turtle.textinput("我爱我家","输入一个名字,或者按[Enter]键结束:") while name != "": family.append(name) print(family) name = turtle.textinput("ok!","请输入另外一个名字: ") ``` ***** ### 一个更完整的例子 ``` import turtle t = turtle.Pen() turtle.bgcolor("black") colors = ["red","yellow","blue","green","orange","purple","white","brown","gray","pink"] family = [] name = turtle.textinput("我爱我家","输入一个名字,或者按[Enter]键结束:") while name != "": family.append(name) name = turtle.textinput("我爱我家","输入一个名字,或者按[Enter]键结束:") for x in range(100): t.pencolor(colors[x%len(family)]) t.penup() t.forward(x*4) t.pendown() t.write(family[x%len(family)],font = ( "Arial",int((x+4)/4),"bold")) t.left(360/len(family)+2) ``` ***** ### 课程小结 1. 创建一个可以反复执行某些代码的“循环” 2. `range(.)` 在“循环”中代表次数 3. `while 条件:` 可以用来控制程序 4. 创建一个列表变量,用 `append(.)` 增加变量中的元素