第三章 程序控制结构-3
知识回顾与导入
#E1-2-2.py
#绘制边长为100单位(像素)的正方形
from turtle import *
forward(100) #向前移动100单位(像素),画A边
left(90)#向左(逆时针)转90度
forward(100) #向前移动100单位(像素),画B边
left(90) #向左(逆时针)转90度
forward(100)#向前移动100单位(像素),画C边
left(90) #向左(逆时针)转90度
forward(100)#向前移动100单位(像素),画D边
left(90) #向左(逆时针)转90度
#E1-2-3.py
#绘制边长为100单位(像素)的正方形
from turtle import *
for x in range(4):
forward(100)
left(90) #行缩进4个字符
#有趣的图形(选做)
#E1-8.py
from turtle import *
for x in range(100):
forward(x)
left(90) #行缩进4个字符
reset()
for x in range(200):
forward(x)
left(91) #行缩进4个字符
#E1-9.py
from turtle import *
bgcolor("black")
pensize(3)
pencolor("red")
for x in range(100):
circle(x)
left(91) #行缩进4个字符
#例3-8
#E3-8.py
from random import *
num=randint(0,10)
x=int(input("请输入一个数:"))
if num==x:
print("恭喜你猜对啦!")
else:
print("很遗憾,没有猜对哟!")
# 可写成:print("恭喜你猜对啦!") if num==x else print("很遗憾,没有猜对哟!")
print("随机数是:",num)
4 循环结构
- 在程序设计过程中,经常需要将一些代码按照要求重复多次执行,这时就需要用到循环结构
- Python有两种类型的循环语句,分别是for循环和while循环。
- for循环为确定次数的循环,也称“遍历循环”,循环次数采用遍历结构中的元素个数来体现
- while循环为非确定或确定次数的循环,通过条件判断是否继续执行循环体
4.1 while 循环
while循环是“当型”循环结构,当条件满足时执行循环体
while <条件表达式>:
<循环体>
功能
- while语句执行时,先计算<条件表达式>的值
- 当<条件表达式>的值为True时,循环条件成立,执行循环体;然后继续判断<条件表达式>的值是否为True,若是,则继续执行循环体,如此周而复始
- 直到<条件表达式>的值为False时停止循环的执行,退出循环
强调
- while语句是先判断再执行,所以循环体有可能一次也不执行
- 当循环体由多条语句构成时,必须用缩进对齐的方式组成一个语句块来分隔子句,否则会产生错误
- 在循环体内必须有改变循环变量值的语句,否则如果<条件表达式>永远为True,循环将会无限地执行下去,造成死循环
【例4-1】编写程序,循环输出数值1,2,…,5
#例4-1
#E4-1.py
#用顺序结构编写
print(1)
print(2)
print(3)
print(4)
print(5)
#例4-1
#E4-1.py
#用while循环结构编写
i=1
while i<=5:
print(i)
i+=1
【例4-2】 编写程序,求1+2+3+…..+100的和
#例4-2
#E4-2.py
i=1
s=0
while i<=100:
s=s+i
i=i+1
print(“s=”,s)
分析:
- s表示累加和;i 控制循环的次数,及作为每次相加的加数
- s的初值是0,i的初值是1
- 每次循环的 循环体:
s=s+i#或s+=i
i=i+1#或i+=1 - 循环条件:
i<=100
【扩展】 编写程序,求1+2+3+…..+100的偶数和
#E4-2-2.py
#求1+2+….+100的偶数和
i=1
s=0
while i<=100:
if i%2==0:
s=s+i
i=i+1
print(s)
#E4-2.py
#求1+2+…+100的和
i=1
s=0
while i<=100:
s=s+i
i=i+1
print(“s=”,s)
【例4-3】从键盘输入若干个正数,求所有正数之和。当输入0或负数时,程序结束。
#例4-3
#E4-3.py
s=0
x=eval(input("请输入一个正数:"))
while x>0:
s=s+x
x=eval(input("请输入一个正数:"))
print("s=",s)
分析:
- 求累加和问题
- 用s表示累加和,s的初值是0,x表示每次输入的数,作为加数
- 每次循环的 循环体:
s=s+x #或s+=x
x=input("请输入一个正数:") - 循环次数不确定,循环条件是:
x>0
【例4-3】从键盘输入若干个正数,求所有正数之和。当输入0或负数时,程序结束。
#例4-3
#E4-3.py
s=0
x=eval(input("请输入一个正数:"))
while x>0:
s=s+x
x=eval(input("请输入一个正数:"))
print("s=",s)
程序运行结果
请输入一个正数:26
请输入一个正数:1
请输入一个正数:3
请输入一个正数:-5
s= 30
【例4-4】用哨兵值控制循环——分析考试情况:依次输入学生的分数,最后输出最高分,最低分和平均分
分析:
- 用哨兵值控制循环就是每循环一次,都要检测一下这个哨兵值是否出现,一旦出现就退出循环
- 假设用变量score表示每次输入的成绩,同时作为哨兵值,当score == -1时退出循环
- 初始化:将第一次输入score作为maxScore,minScore, sumScore=0,i=0
- 循环条件: score != -1
- 循环体:
将当前成绩求累加和,作为总成绩sumScore,同时记录当前输入的次数i。
将当前输入的分数与当前最高分、最低分相比较,记录最高分、最低分 - 循环结束后,输出sumScore/i表示平均分,最高分maxScore,最低分minScore
score=maxScore=minScore=eval(input("请输入分数:"))
sumScore=i=0#初始化总成绩sumScore和人数 i
while score != -1:
sumScore+=score #总成绩累加求和
i+=1#总人数累加求和
maxScore=score if score>maxScore else maxScore #记录最高分
minScore=score if score<minScore else minScore #记录最低分
score=eval(input("请输入分数:"))
print("最高分:",maxScore)
print("最低分:",minScore)
print("平均分:",round(sumScore/i,1))
课后作业
1.新建程序文件 “姓名-4-1.py”,用while循环编写程序绘制边长为100的正方形。
2.新建程序文件 “姓名-4-2.py”,用while循环编写程序,输出200内所有能被7或9整除的自然数的和
提示:请参考【例4-2】扩展
3.新建程序文件 “姓名-4-3.py”,用while循环改写【例3-8】游戏猜数字程序:随机产生一个0-10间的整数,玩家通过键盘输入一个数竞猜,若猜中,则输出“恭喜你猜对啦!”,否则输出“很遗憾,没有猜对哟!”,直到用户输入-1结束游戏
提示:参考程序在下一页,请填 空,并回答break的作用是什么?
import random
num=random.randint(0,10)
x=eval(input("请输入一个数:"))
while ___【空1】________:
if num==x:
print("恭喜你猜对了!")
break
else:
print("很遗憾,没有猜对哟!")
x=_____【空2】_____