0
点赞
收藏
分享

微信扫一扫

python入门基础4----程序组织结构之循环结构

未定义变量 2022-02-18 阅读 27
python

文章目录


前言

本文主要讲述python程序组织结构的循环结构,包括while循环与for-in循环,同时概括与循环结构相关的range()函数,break语句,continue语句以及else语句。本文学习材料来自马士兵Python中入门基础版(基础语法) 2020最新版Python小白教程。视频链接https://space.bilibili.com/612593877/?spm_id_from=333.999.0.0


提示:以下是本篇文章正文内容,下面案例可供参考

程序组织结构2

循环语句

python程序循环分类

  1. while
  2. for in

range()函数常可以用于产生循环体的循环执行范围。在整体循环结构中起着重要的作用。

range()函数

range()函数生成整数序列的函数。range()函数的三种写法形式:

  1. range(end): 此时range函数中只有一个参数,该参数表示所要产生整数序列的终止端点,默认起始端点为0,序列间隔为1
  2. range(start, end): 此时range函数中有两个参数,分别表示所要产生整数序列的起始端点与终止端点,默认步长为1
  3. range(start, end, step): 创建起始端点为start,终止端点为end的整数序列,序列之间的间隔为step,step可正可负。step为正则start小于end,创建单调递增序列;step为负,需要start大于end,创建单调递减序列。

  1. range()函数创建的整数序列不包含end这一点,所产生的整数序列在[start, end)这一半开半闭的区间,即所产生的整数序列都是小于end这一点的。
  2. range()函数的参数必须为整数,不可为浮点类型的数据,即不可为小数。

range类型的优点:不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储序列的起始端点start,终止端点end与整数序列的间隔step。其返回值是一个迭代器对象

以range(end)为例

print(range(6))
print(range(1,6))
print(range(1, 6, 2))
print(range(6, 1, -2))
输出结果为:
range(0, 6)#迭代器对象
range(1, 6)
range(1, 6, 2)
range(6, 1, -2)

  1. 要想查看range()函数具体的元素,需要使用列表函数list()函数range对象的具体元素
  2. in 与 not in 判断整数序列中是否存在(不存在)指定得整数。
r1 = range(6)
r2 = range(1,6)
r3 = range(1, 6, 2)
r4 = range(6, 1, -2)
print(list(r1)
print(list(r2)
print(list(r3)
print(list(r4)
print(bool(5 in range(6)))
print(bool(6 not in range(6)))

输出结果为:
[0, 1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 3, 5]
[6, 4, 2]
True
True

while循环

语法结构:

while 条件表达式:
      条件执行体(循环体)

撰写循环结构的代码一般需考虑清楚判断次数,执行次数。通常可归纳为以下四个步骤:

四部循环法:
1. 初始化变量
2. 条件判断
3. 条件执行体(循环体)
4. 改变变量

例题】计算0到4之间的累加和

题目分析:

  1. 得到0, 1, 2, 3, 4
  2. 依次计算0+1, 0+1+2, 0+1+2+3, 0+1+2+3+4

针对以上分析,我们需要找到一个量来表示0, 1, 2, 3, 4; 还需要有一个变量来表示逐次相加的和。

需要相加的数每次相加的运算每次加完后的和
00+00
10+11
21+23
33+36
46+410

若以一个变量 i i i 来代表上表中需要相加的数,该变量在每次进行运算前都比上一次多一,即相较于前一次运算, i i i 变成了 i + 1 i+1 i+1。若以一个变量 s u m s sums sums 来代表每次加完后的和,则每次的相加运算都是 上一次的 s u m s sums sums + 本次的 i i i,我们所需要的是0到4的和,故要求 i < 5 i<5 i<5。根据分析,代码可表示如下:

i = 0#(1)初始化变量
sums = 0#(1)初始化变量
while i < 5:#(2)条件判断
       sums = sums + i#(3)(4)条件循环体 改变变量
       i = i + 1#(3)(4)条件循环体,改变变量
注:(3)(4)分别可写为:
sums += i
i += 1

例题】计算1到100之间的偶数

'''代码1'''
a = 1
sums = 0
while a <= 100:
    if a % 2 == 0:#(1)
        sums += a
    a += 1#(2)
print('1到100之间的偶数和为:', sums)
'''代码2'''
a = 2
sums = 0
while a <= 100:
       sums += a
       a += 2
print('1到100之间的偶数和为:', sums)
(1)处还可写为: if not a%2if a%2 代表判断 a%2 的布尔值,如果直接写if a%2,代表 a%2True,因为0的布尔值为False,所以if a%2 即表示 if a%2 != 0(2) 变量的改变属于循环体中的一部分,不属于if判断语句的执行体,因此此处需注意语句的缩进,即需与if对齐。

for-in 循环

一般写为:

for 变量 in 范围
注:
1. 变量可无,若不想定义变量时,可用下划线_代替。
2. 范围包含了循环体执行的次数,可为一个字符串,若为字符串则循环体执行的次数即为字符串元素的个数;可为一个数字序列

例 1】输出10以内的整数。

for i in range(10):
       print(i)

例 2】输出3遍“我爱学习”。

for _ in range(3):
       print('我爱学习')

例 3】计算1到100之间偶数的和。

sums = 0
for i in range(101):
       if i % 2 == 0:
              sums += i
print('1到100之间的偶数和为:', sums)

例 4】 输出100到999之间的水仙花数。
水仙花数的定义:对于三位数来说,其个位数上的数字的3次幂加上十位数上的数字的3次幂加上百位数上的数字的3次幂等于这个三位数本身,例如:
153 = 3 3 + 5 3 + 1 3 = 27 + 125 + 1 153 = 3^3 + 5^3 + 1^3 = 27 + 125 + 1 153=33+53+13=27+125+1

'''代码1'''
nums = 0
for i in range(100, 1000):
    if i == (int(str(i)[0]))**3+(int(str(i)[1]))**3+int((str(i)[2]))**3:#(1)
        nums += 1
        print(i, '是100到999之间的水仙花数')
print('100到999之间的水仙花数为', nums)

#(1)将三位数转化为字符串形式分别获取该三位数上的个十百位数上的数字,此时该数字为字符类型,因此在计算时再转化为整型。

'''代码2'''
nums1 = 0
for i in range(100, 1000):
    ge = i % 10#(1)
    shi = i // 10 % 10#(2)
    bai = i // 100 % 10#(3)
    if ge ** 3 + shi ** 3 + bai ** 3 == i:
        print(i, '是100到999之间的水仙花数')
        nums1+=1
print('100到999之间的水仙花数为:', nums)

#(1)获取个位上的数字,计算该数除以10的余数
#(2)获取十位上的数字,此时应先去掉个位上的数字,即先整除10,然后再对整除后的数字计算除以10后的余数
#(3)获取百位上的数字,此时应去掉个位和十位上的数字,即先整除100,然后再对整除后的数字计算除以10后的余数

流程控制语句break

break语句用于结束循环结构,如果条件满足,则直接跳出循环体。通常与分支结构if一起使用。

例题】从键盘录入密码,最多录入3次,3次错误输入密码后退出卡片。如果录入正确就结束录入密码,执行下一步操作,不正确则输出密码不正确,一直输入直到循环截止。

'''代码1:for-in 循环'''
for item in range(3):
       password = input('请输入密码:')
       if password == '888888':
              print('密码正确,请执行下一步操作')
              break
       else:
              print('请重新输入密码!')
print('请退出卡片!')

'''代码2:while循环'''
item = 0
while item < 3:
       password = input('请输入密码:')
       if password == '888888':
              print('密码正确,请执行下一步操作')
              break
       else:
              print('请重新输入密码!')
       item += 1
print('请退出卡片!')

continue

用于结束当前循环,进入下一次循环,如果满足条件则继续下一次循环,通常与分支结构中的if一起使用

'''要求输出1到50之间所有5的倍数
 5的倍数的共同点:和5的余数为0的数都是5的倍数
 和5的余数不为0的数则不是5的倍数'''
for i in range(1,51):
    if i % 5 == 0:
        print(i, '是5的倍数')
'-----------使用continue函数输出1到50之间5的倍数----------------'
print('请使用continue函数输出1到50之间5的倍数')
for i in range(1, 51):
    if i % 5:
        continue
    print(i, '是5的倍数')

else语句

else语句,不仅可以和if连用,还可以与while,for连用。
例题】密码录入问题。从键盘录入密码,最多录入3次,3次错误输入密码后退出卡片。如果录入正确就结束录入密码,执行下一步操作,不正确则输出密码不正确,三次密码错误则退出卡片。

  1. else语句与for-in循环连用
for item in range(3):
       password = input('请输入密码:')
       if password == '888888':
              print('密码正确')
              break
       else:
              print('请重新输入密码!')
else:
    print('三次密码错误,请退出卡片!')
  1. else语句与while循环连用
item = 0
while item < 3:
       password = input('请输入密码:')
       if password == '888888':
              print('密码正确,请执行下一步操作')
              break
       else:
              print('请重新输入密码!')
       item += 1
else:
       print('请退出卡片!')

嵌套循环

例1】输出一个3行4列的元素为 ∗ * 的矩阵

for i in range(1, 4):
    for j in range(1, 5):
        print('*', end='\t')
    print()

例2】打印 9 × 9 9\times9 9×9乘法表

for i in range(1, 10):
    for j in range(1, i+1):
        print(i, '*', j, '=', i * j, end='\t')
    print()
1 * 1 = 1	
2 * 1 = 2	2 * 2 = 4	
3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	
4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	
5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	
6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	
7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	
8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	
9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81	

为缩小字符间的间距,可使用str()函数将整型数据进行转换,统一输出。

for i in range(1, 10):
    for j in range(1, i+1):
        print(str(i)+'*'+str(j)+'='+str(i*j), end='\t')
    print()
输出结果为:
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

二重循环中的break与continue

break语句与continue语句的区别:break语句是满足条件则跳出整个循环体;continue语句为如果满足条件则继续下一次循环并不跳出循环体。

for i in range(5):
    for j in range(1, 11):
        if j % 2 == 0:
            #break
            continue
        print(j, end='\t')
    print()
输出结果为:
1	3	5	7	9	
1	3	5	7	9	
1	3	5	7	9	
1	3	5	7	9	
1	3	5	7	9	
for i in range(5):
    for j in range(1, 11):
        if j % 2 == 0:
            break
            #continue
        print(j, end='\t')
    print()
输出结果为:
1	
1	
1	
1	
1	

总结

本文系统总结了循环结构的语法结构,包括while循环结构与for-in循环结构。同时概括了与循环结构相关的函数与语句。其中range()函数生成整数序列,可用于产生循环条件的范围;break语句与continue语句可用于控制循环体的中间退出与执行结构。

举报

相关推荐

0 条评论