0x00 问题引入
- 问题:输入30个数,输出最大的数
分析
- 第一个数可能是最大的数,记住它;
- 对于之后的每一个数,与记住的数字进行比较,如果比记住的数字大,则记住此数;
- 所有的数字看过之后,输出最大的数;
循环
- 程序中重复做某事的现象称为
循环
- 例如求1~100的和,求一个班某科成绩的平均分
- 程序中重复做某事的现象称为
循环结构(循环条件和循环体)
0x01 while循环
问题:求1+2+3+4+……+100的值
- 流程图
Python语言实现
# 问题:求1+2+3+4+……+100的值 sum = 0 i = 1 while i < 101: sum += i i += 1 print(sum)
- 流程图
问题:求1~n的和,n为任意正整数
# 问题:求1~n的和,n为任意正整数 n = int(input('请输入正整数n:')) sum = 0 i = 1 while i < n+1: sum += i i += 1 print(sum)
0x02 for循环
遍历循环
- 针对某一数据集合
- 循环依次访问集合中每一个元素
- 是一种确定次数的循环
- for循环语句语法
range()函数
range(start,end,step) range()函数创建序列,包括下限,不包括上限 例如 range(101),范围0~100 range(1,101),访问1~100
问题:求1~100之间的自然数之和
sum = 0 for i in range(1,101): sum += i print(sum)
问题:求1~n之间的自然数之和,n为任意正整数
sum = 0 for i in range(1,101): sum += i print(sum)
0x03 循环嵌套
循环的嵌套
- 是指在一个循环中嵌套另外一个完整的循环,即循环体中又包含循环语句
- while循环和for循环可以相互嵌套
- 循环嵌套的执行过程
一次外循环对应着一次完整的内循环
问题:打印99乘法表
# 打印99乘法表 for i in range(1, 10): # 控制行 for j in range(1, i + 1): # 控制列 print('{}*{}={}'.format(j, i, i * j), sep='', end='\t') print()
0x04 break和continue
break用来结束循环
- 程序从循环后代码继续执行
continue用来结束当前当次循环
- 不再执行循环体中下面尚未定义的语句
- 但不结束当前循环
问题:求200以内能被17整除的最大正整数
- 分析:这个查找过程将以递减的形式遍历200~1之间的整数,当找到第一个能被17整除的数时,循环过程立即停止
# 求200以内能被17整除的最大正整数 for i in range(200, 1, -1): if i % 17 == 0: break print('200以内能被17整除的最大正整数是{}'.format(i))
问题:求1~100以内所有偶数和
# 求1~100以内所有偶数和 sum = 0 for i in range(1, 101): if i % 2 == 0: sum += i else: continue print(sum)
问题:输出200以内所有的素数,并输出素数的个数
- 分析:素数是除了1和它本身不能被其他数整除的数字,本题采用双重for循环实现,外层遍历2~200之间所有的整数,内层循环用来判断一个数是否为素数
# 方法1 num = 0 for i in range(2, 200): k = True for j in range(2, i): if(i % j == 0): k = False break if(k==True): print(i) num += 1 print('200以内的素数有{}个'.format(num))
# 方法2 import math num = 0 for i in range(2, 200): m = int(math.sqrt(i)) k = True for j in range(2, m + 1): if(i % j == 0): k = False break if(k): print(i) num += 1 print('200以内的素数有{}个'.format(num))
continue语句和break语句的区别
- continue只结束本次循环,而不终止整个循环的执行
- break语句则是结束整个循环过程,不再判断循环的条件是否成立