内容正文:
安徽省计算机类高考技能教学
循环结构
目录
安徽省计算机类高考技能教学 1
一、教学目标 1
【知识目标】 1
【能力目标】 1
【素养目标】 2
二、基本知识讲解 2
什么是循环结构 2
for循环 2
while循环 7
循环结构的嵌套 9
循环控制语句 10
一、教学目标
【知识目标】
1.理解for循环结构的执行流程;
2.掌握for循环结构语句的语法结构;
3.简单for循环结构的简单应用。
4.理解while循环的执行流程;
5.掌握while循环语句的语法结构;
6.区分for循环与while循环。
7.理解循环嵌套结构的执行流程;
8.掌握循环嵌套结构语句的语法结构;
9.简单掌握循环嵌套结构的简单应用。
10.理解break、continue、pass语句的作用
11.掌握break、continue的使用
【能力目标】
培养学生循环结束语句的应用。
【素养目标】
培养在解决实际问题中,合理使用for与while循环解决实际问题。
二、基本知识讲解
什么是循环结构
在实际应用中,经常需要周而复始地做某一件事。针对此类问题,在Python中可以编写循环结构的程序来解决此类问题。
循环结构是控制一个语句块重复执行的程序结构,由循环条件和循环体两部分组成,循环结构的特点是:在一定条件下重复执行某些语句,直至重复到一定次数或该条件不再成立为止。
for循环
在Python中for循环常用于遍历字符串、列表、元组、字典、集合等序列类型。逐个获取序列中的各个元素,迭代变量用于存放从序列中逐个取出的元素,所以一般不会在循环中对迭代变量手动赋值。每条for语句后需要一个冒号“:”,表示紧跟着的是执行循环的语句块。
for循环结构流程图:
for循环结构语法:
for 迭代变量 in 字符串|列表|元组|字典|集合:
语句块
在for循环中可用内置函数range()方便快捷的生成一个整数序列。Python中range()函数格式说明如下:
range(start,stop[,step])
参数说明:
start:计数从start开始,默认是从0开始,如range(4)等价于range(0,4)。
stop:计数到stop结束,但并不包括stop.如range(0,4)是包含数字[0,1,2,3],并没有4.
step:步长,默认为1。如range(0,4)等价于range(0,4,1)
使用range()函数进行10s-1s的倒计时:
import time
for i in range(10,0,-1):
time.sleep(1)
print(i)
range对象是不可变的序列类型
列表推导式【列表解析】
可以通过列表推导式快速高效的创建新的列表.有两种语法格式:
[表达式 for 迭代变量 in 可迭代对象]
[表达式 for 迭代变量 in 可迭代对象 if 条件表达式]
[表达式 for 迭代变量 in 可迭代对象 for 迭代变量 in 可迭代对象] 嵌套循环
lst = [i % j for i in range(1, 3) for j in range(1, 4)]
print(lst)
上面的代码等价于下面的代码:
lst=[]
for i in range(1, 3):
for j in range(1, 4):
lst.append(i%j)
print(lst)
举例:随机生成5个10-30之间的整数,存放于列表中
import random
lst=[random.randint(10,30) for i in range(5)]
print(lst)
举例:随机生成5个10-30之间的互不相同的整数,存放于列表中
# 方法1
import random
lst=[i for i in range(10,31)]
print(random.sample(lst,5))
# 方法2
import random
count=0 # 计数
lst=[]
while True:
num = random.randint(10,30)
if num not in lst:
lst.append(num)
count+=1
if count==5:
break
print(lst)
举例:随机生成5个10-30之间的偶数,存放于列表中
import random
lst=[random.randrange(10,31,2) for i in range(5)]
print(lst)
举例:列出1-10所有数字的平方
lst = [i ** 2 for i in range(1, 11)]
print(lst) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
举例:列出1-10中能被2整除的数的平方
lst = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(lst)
除了列表推导式,还有集合推导式,字典推导式。没有元组推导式
dict1 = {i: i ** 2 for i in range(1, 5)}
print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16}
举例:将字典的键和值互换
# 方法1:
dict1 = {0: 'red', 1: 'green', 2: 'blue'}
dict2 = {v: k for k, v in dict1.items()}
print(dict2)
# 方法2:
dict1 = {0: 'red', 1: 'green', 2: 'blue'}
dict2={}
for i in dict1:
dict2[dict1[i]]=i
print(dict2)
举例:计算1-15的累加和
s = 0
for i in range(1, 16):
s += i
print("1至15的累加和为:", s)
举例:输入15位同学的成绩,计算出平均分。运行结果如下:
s = 0
for i in range(1, 6):
score = eval(input(f"请输入第{i}位同学的成绩:"))
s += score
print("这十五位同学的平均分为:", s / 15)
举例:键盘输入一个自然数,判断是否为素数(只能被1和它本身整除)2是最小的素数。
# 方法1:
num = int(input("请输入一个自然数:"))
flag = True # 默认是素数
if num >= 2:
for i in range(2, num):
if num % i == 0:
flag = False
break
if flag:
print("{}是素数".format(num))
else:
print("{}不是素数".format(num))
else:
print("请输入正确的自然数!")
# 优化上述的算法
# 方法2:
import math # 数学库
num = int(input("请输入一个自然数:"))
flag = True # 默认是素数
if num >= 2:
for i in range(2, int(math.sqrt(num)) + 1): # int(num**0.5)+1
if num % i == 0:
flag = False
break
if flag:
print("{}是素数".format(num))
else:
print("{}不是素数".format(num))
else:
print("请输入正确的自然数!")
while循环
Python中,while循环执行顺序为:判断条件为True,执行语句块1,直到条件为False时退出循环,执行else子句的语句块2(else子句可以省略)。while循环结构流程图如图所示:
根据上述流程对应的语句格式如下:
While 表达式:
语句块1
[else:
语句块2]
举例:使用while循环语句来计算整数1到10的和
s = 0
i = 1 # 初始值
while i <= 10:
s += i
i += 1 # i变量的值加1
print(s)
举例:随机生成1-20之间的数字num,然后从键盘输入数字,如果输入的数字大于num,则输出“猜的数字偏大”如果输入的数字小于num,输出“猜的数字偏小”。猜对数字,则输出“恭喜,猜对啦!”并且退出循环。
import random # 导入随机数模块
num = random.randint(1, 20) # 生成1-100之间的随机整数
t = eval(input("请输入你要猜的数字(1-20):"))
while t != num:
if t > num:
print("猜的数字偏大")
if t < num:
print("猜的数字偏小")
t = eval(input("请输入你要猜的数字(1-20):"))
print("恭喜,猜对啦!")
举例:简易加法计算器,实现连续输入数字相加求和,直到输入字母‘q’时显示相加结果。运行结果如图3-3-9所示:
s=0
i=1
while True:
num=input(f"请输入第{i}个数字:")
if num=='q':
break
s+=int(num)
i+=1
print("程序结束")
print("相加结果为:%.1f"%s)
循环结构的嵌套
一个循环体里面嵌套另外一个循环体时,称之为“循环嵌套”。for语句和while语句循环嵌套语法格式如下:
for 变量1 in 遍历序列1:
for 变量2 in 遍历序列2:
语句块2
语句块1
while 条件表达式1:
while条件表达式2:
语句块2
语句块1
当然可以在循环体内嵌入其他的循环体,如在while循环中可以嵌入for循环,可以在for循环中嵌入while循环。
举例:使用for循环结构打印一个由10行星号组成的直角三角形。运行结果如下:
for i in range(1, 10):
for j in range(1, i + 1):
print("*", end="")
print()
举例:九九乘法表,运行结果如下所示:
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}*{i}={j * i}", end="\t")
print()
循环控制语句
break
break语句:用在while和for循环中,通常与if语句一起使用,可以用来跳出当前所在的循环结构,即使循环还在执行,也会立即停止执行的循环语句,跳出循环体(如果有else子句,则不会执行),继续执行循环下面的语句。
for 循环变量 in 序列对象:
语句块(循环体)
[else:
语句块]
如果for和while循环里面的语句块有break子句,且执行了break语句那么else里面的子句不会执行。
举例:使用while循环语句和break来求100以内的累加和
i = 1
s = 0
while True:
if i == 101:
break
s += i
i += 1
print(s)
举例:键盘输入自然数,判断素数。要求:要用到break
num = eval(input("请输入自然数(n>=2):"))
if num>=2:
for i in range(2,num):
if num%i==0:
print(f"{num}不是素数")
break
else:
print(f"{num}是素数")
else:
print(f"{num}不是素数")
举例:从键盘连续输入数字进行累加,直到输入-1表示退出累加,输出累加和。
s = 0
while True:
num = int(input("请输入数字(-1退出累加):"))
if num == -1:
break
s += num
print("累加和:", s)
continue
continue用于跳过本次循环,continue也是用在while和for循环中,通常也是与if语句一起使用,但是与break有所不同,continue语句用来跳过当前循环的剩余语句,然后继续执行下一轮循环,而break语句则是用于停止本层的整个循环。
展示continue与break的区别:
for i in range(1, 10):
if i == 5:
continue
print(i)
for i in range(1, 10):
if i == 5:
break
print(i)
举例:输出1~80之间不能被5整除的整数,运行结果如下:
for i in range(1, 81):
if i % 5 == 0:
print()
continue
print(str(i), end="\t")
pass
为了保持程序结构的完整性,Python提供了一个空语句pass,pass语句一般仅作为占位语句(占位符),不做任何事。
三、例题讲解
1.评委打分:输入评委数量,若评委人数小于等于3个人。则直接计算平均分。若大于3人,则先去除最高分或最低分。再计算平均分。(保留小数点后1位)
n=int(input("请输入评委的人数:"))
lst=[]
for i in range(1,n+1):
lst.append(eval(input(f"请输入第{i}位评委的分数:")))
if n<=3:
avg=sum(lst)/len(lst)
else:
lst.sort()
lst.pop(0) # 删除最低分
lst.pop() # 删除最高分
avg=sum(lst)/len(lst)
print("平均分:%.1f"%avg)
2.lst=[5,1,2,3,8,13,3,4,7,8,6,9,5,6]去除lst里面重复的元素且不改变元素原来的相对位置
nlst=[]
lst=[5,1,2,3,8,13,3,4,7,8,6,9,5,6]
for i in lst:
if i not in nlst:
nlst.append(i)
print(nlst)
3.随机生成10个1-100之间的整数放入列表lst,再将里面能被3或7整除的数去除
import random
lst=[random.randint(1,100) for i in range(10)]
print(lst)
for i in lst:
if i%3==0 or i%7==0:
lst.remove(i)
print(lst)
4.使用列表推导式生成1-100之间能被7或8整除的数的平方,最后再求列表的累加和
lst = [i**2 for i in range(1,101) if i%7==0 or i%8==0]
print(sum(lst))
5.判断素数 素数:只能被1和它的本身整除 2是最小的素数
num=int(input("请输入整数:"))
flag=True # 默认是素数
for i in range(2,num):
if num%i==0:
flag=False
break
if flag:
print(f'{num}是素数')
else:
print(f'{num}不是素数')
6.键盘连续输入数字进行累加,直到输入-1表示退出累加,输出累加和。
s=0
while True:
num=eval(input("请输入数字:"))
if num==-1:
break
s+=num
print(s)
7.使用while循环计算1-2+3-4+5-6+....+99-100的累加和
s=0
flag=1
i=1
while i<=100:
s+=i*flag
flag*=-1
i+=1
print(s)
四、课堂小结
循环结构是考试的重点,必考的部分。理解循环的执行流程:
for循环:
从序列中取出一个元素,赋值给变量。
执行循环体代码。
重复上述步骤,直到序列中的元素被遍历完。
while循环:
检查条件是否为真。
如果为真,执行循环体代码。
重复上述步骤,直到条件为假。
学好循环结构,还需要同学们多加练习和理解。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$