2020年3月25日 第三章 程序控制结构-3

第三章 程序控制结构-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】_____
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342