Python笔记整理6: 第六章 流程控制

第六章 流程控制

“”"
流程控制
程序执行过程

程序的结构有三种:

    顺序结构:按部就班(自上而下)
    选择结构:根据条件去选择条件成功的模块执行
    循环结构:重复性执行一段代码

缩进
    同一个层次的语句必须有相同的缩进,习惯上使用四个空格(tab)作为一个缩进

仅有顺序结构不足以表达一些很复杂的程序,就比如现在我们很可能根据条件的不同而去决定做什么事情,比如天气
比如两次密码输入一致


 一、选择判断(选择结构)

    使用pycharm调试bug(错误)

    (1)设置断点:程序运行时会暂停到断点的位置(pycharm并没有执行停止的那一行)
    (2)F8键,执行当前这一行程序。
    (3)F9能够让程序直接走完(会走到下一个断点)
    (4)鼠标悬停在变量的位置,会显示变量的值


    (一)   if:当条件成立时,则执行的代码段

    If语法
        利用强制缩进来组织语句体,按照惯例缩进4个空格


    语法
        if 条件==True:
            执行if成立时的代码段

         a=100
         if a==90:
             print("我现在很瘦")
             print("我可以继续胡吃海塞")
         print("其他的代码块,无论if是否成立,都会执行")

    (二)   if  else: else代表当if条件不成立的时候执行的代码段 (二选一)

        条件成立 y if 语句体
        条件不成立 n else语句体

        语法:

            else的后面没条件,else必须要有if才能使用。
             a=100
             if a==90:
                 print("我现在很瘦")
                 print("我可以继续胡吃海塞")
             else:
                 print("我不知道我是大于90,还是小于90")
             print("其他的代码块,无论if是否成立,都会执行")

            小知识pycharm的使用

    (三)   if elif elif....多选一:多选择分支的判断(弥补:if-else只能实现两条分支)

        多个选择

        十字路口

         elif也不能独立使用,必须是在if条件后使用。
         if和多个elif,哪个条件成立就执行哪个,只要遇见符合的条件,直接执行下面的代码段,
         不再继续向下进行其他elif的判断

        if 条件:
           if成立时执行的代码段
        elif 条件:
           elif条件成立时候执行的代码段
        elif 条件:
           elif条件成立时候执行的代码段
        elif 条件:
           elif条件成立时候执行的代码段

        else:
            前面所有的if和elif条件都不成立,执行的代码


         a=110
         if a>100:
             print("没法见人了....")
         elif a==90:
             print("我现在很瘦")
             print("我可以继续胡吃海塞")
         elif 100>a>90:
             print("我不能再吃了")
             print("要去健身房")
         elif a>100:
             print("没法见人了....")
         else:
             print("我不知道我是大于90,还是小于90")
         print("其他的代码块,无论if是否成立,都会执行")


        使用if  elif else条件判断开发时习惯:
        (1)范围要按照顺序写
        (2)没有包含关系的时候,如果不按顺序,需要确定每个条件的范围
        (3)有包含关系的时候,把可能性大的放在前面:因为根据频率进行排序,节省时间


        score = int(input('please input the score'))
        if score >= 90:
            print('A')
        elif score >= 80:
            print('B')
        elif score >= 70:
            print('C')
        elif score >= 60:
            print('D')
        else:
            print(score)

        k可能的取值是1, 2, 3, 4
        k = 1
        if k == 1:
            print(‘’)
        elif k == 2:
            print(‘’)
        elif k == 3:
            print(‘’)
        elif k == 4:
            print(‘’)


         练习:
         使用random产生1 3的随机数,根据随机数的不同来确定中午吃什么。
        1 牛肉面   2麻辣烫   3 吃土
         import random
         a=random.randint(1,3)
         if a==1:
             print("牛肉面")
         elif a==2:
             print("麻辣烫")
         else:
             print("吃土")


    (四)布尔类型的转换

         if 条件

        其他数据类型都可以转换成布尔类型
                    False      True
        int          0
        float        0.0
        complex      0j
        list         无元素
        tuple        无元素
        str          空串""
        bytes        空字节b""
        dict         无元素
        set          无元素


         a="hello"
         if len(a)!=0:
             pass  关键字,代表占位
         if a: 判断a是否是空串,如果不是空串,则做if下面的操作
             pass


    (五)if-else 简化版:三元表达式

         if条件判断的表达式
         语法: if成立的表达式  if 条件 else  if不成立的表达式
         使用场合:if条件和语句体比较简单的时候。
         x=1
         需求:如果x=1 返回男,否则返回女
         if x==1:
             print("男")
         else:
             print("女")

         三元表达式:
        print("男" if x==1 else "女")


         练习:
         1-7 周一,周天
         1-5 上课   6 、 7 休息
         day=int(input("请输入周几:"))
         print("上课" if 1<=day<=5 else "休息")

         1-5 上课   6 上自习、 7 休息
         print("上课" if 1<=day<=5  else ("上自习" if day==6 else "休息"))

    (六)if 嵌套

        嵌套:选择分支里面还有选择分支,if里面还有if

    (七)断言

        所以断言应该设置在程序的关键位置,这样一旦程序运行失败了,就会有提示

         用来做调试程序,判断程序执行到这一刻是否正确

        关键字assert

         语法:
        assert 表达式
        或
        assert 表达式, 提示信息

        表达式为真,程序继续执行

         意思:断言表达式成立,程序可以继续执行, 如果不成立,程序会抛出assertionError
         assert 1>5 ,"谁告诉1>5的??"
         print("其他代码段")

         结果如下:
         assert 1>5 ,"谁告诉1>5的??"
         AssertionError: 谁告诉1>5的??

        Assert表达式实例运用:

            password = input('请输入密码:')
            password = input('请再次输入密码:')
            在此处设下断言,仅当两次密码一致时,才有必要进行后续的注册工作
            assert password == password2
            print('进行后续的注册工作......')
            print('注册成功')

            请输入密码:123
            请再次输入密码:123
            进行后续的注册工作......
            注册成功

            请输入密码:12
            请再次输入密码:123
            Traceback (most recent call last)
                File 'C:/Python/day3/assert_test.py', line 11, in 
                    assert password == password2    '两次密码输入的不一致'
            AssertionError: 两次密码输入的不一样

        横杠大o能够终结断言,python IDLE
        参图


 二、循环

    重复性的执行一次
    今天上班,明天上班,后天上班…

     需求:输出5次helloworld
         print("hello world")
         print("hello world")
         print("hello world")
         print("hello world")
         print("hello world")

    需求虽然满足,但是:
         两个问题:1. 代码冗余   2.代码不容易维护(以后可能需要修改)
         采用循环去解决重复的问题

    (一)while 循环
         语法:while 表达式:
                    循环体

        如果while 条件==True:
                    执行循环语句1
                    循环语句2

        然后重复执行while,一直执行,直到while表达式为假,停止执行

        需求: 解决5次helloworld
         time=1
         while time<=5:
             print("hello world")
              time=time+1
             time+=1
         print("其他代码段")


              1+2+...+100=5050
             a=1
             s=0
             while a<=100:
                  s=s+a
                 s+=a
                 a+=1
             print(s)


        输入开始点和结束点,求出之和

            start = int(input('请输入开始点:))
            end = int(input('请输入结束点:'))
            index = start
            sum = 0
            while index <= end:
                sum += index
                index += 1
            print(sum)


        解决小游戏中循环玩的问题。

             realvalue=8
             tag="y"
             while tag=="y":
                 guess=int(input("请猜一个数字:"))
                 if guess==realvalue:
                     print("猜对了")
                     tag="n"
                 else:
                     print("猜错了")
                     if guess>realvalue:
                         print("猜大了,小一点吧")
                     else:
                         print("猜小了,大一点吧")
                     tag=input("是否还继续猜?y/n")
             print("游戏结束")
             while一般适合指定条件的循环,跟次数相关紧密


        求阶乘

            value = int(input('请输入要求阶乘的数值:'))
            multi = 1
            index = 1
            while index <= value:
                multi *= index
                index += 1
            print(multi)

    (二)for 循环
    
        依据任意序列中的子项,按照他在序列中顺序进行迭代。
        迭代体

        语法:
            For 变量 in 可迭代对象:
                循环体

        可迭代对象?这是一个对象,可以产生一系列的值(可以想象成一个盒子,你可以一个一个从里面掏出东西);不要纠结具体是什么对象;

        对可迭代对象中的每一个元素,依次赋值给变量

        每次拽出来一个元素,赋值给变量,然后执行下面的语句
        也就是说,在循环体中对变量进行的操作,也就是依次对可迭代对象进行的操作

        图
        for x in 可迭代对象

        可迭代对象   ===》    变量

        for 每个元素的变量名 in 迭代对象 (字符串、字节、列表、元组、集合、字典):
            迭代体



        range()函数
            有一个函数就可以产生这一系列的可迭代对象,就是range()函数,它可以产生一个区间的整数值(可迭代对象)

            迭代对象中有多少元素(len(对象)),循环就迭代几次。

            print(range(2,10))

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

            # range(2, 10)
            # 2
            # 3
            # 4
            # 5
            # 6
            # 7
            # 8
            # 9

             for实现输出5次hello world
                 for i in "11111":
                     print("hello world")
                 print("其他的代码段")

            输出1 2 3 4 5
                 for i in "12345":
                     print(i)

             1+2+...+100 for循环解决
                 s=0
                 for i in "12345":
                     s+=int(i)
                 print(s)

            start,end,step

              range()函数/类
             print(type(range(2,10)))
             print(list(range(2,10))) list函数能够将对象转换成列表,可以将range产出的值全部放到列表中。前闭后开
             range(start,end,step)
             start 、end:正数,负数 0  方向,包含start,不包含end
             step步长,就是增量值,默认值1
             print(list(range(10,2,-1)))
              注意使用的时候,step,start和end的方向
             print(list(range(1,101)))

             s=0
             for i in range(1,101):
                 s+=i
             print(s)

             找到100以内所有奇数
                 print(list(range(1,101,2)))
                 print(list(range(2,101,2)))

              for循环解决奇数和偶数1
                 for i  in range(1,101):
                     if i%2==0:
                         print(f"偶数{i}")

             练习:判断输入的数是否是质数。
                 质数:只能被自己和1整除的数
                 17  2 3....16
                 num=int(input("请输入一个数"))
                 tag=True
                 for i in range(2,num):
                     if num%i==0:
                          说明不是质数
                         tag=False
                          print("不是质数")
                 if tag:
                     print("是质数")

            比while循环简单
                因为循环体里面的操作可以省去,然后变量不需要先声明

                start = int(input('请输入起始点:'))
                end = int(input('请输入结束点:'))
                sum = 0
                for x in range(start, end + 1)
                    sum += x
                print(sum)


    (三)循环的嵌套

        多个循环
        for i in 外循环对象(ABC):
           for j in 内循环对象(1,2,3,4,5):
              循环体
        对于嵌套循环来说,外循环每执行一次,内循环都会完整执行一轮。
        外层循环如果执行M次,内层循环如果每一轮执行N次,则内层循环的循环体总共会执行M * N 次

         在一行中打印6个*
         print("*"*6)
         for i in range(6):
             print("*",end="")

         需要打印10行,每行6个*
         for j in range(10):
             for i in range(6):
                 print("*", end="")
             print()

         li=[1,2,3]
         for i in li:
             print(i)

         li=[[1,2,3],[4,5,6],[7,8,9]]
         for i in li:
              print(i)
             for j in i:
                 print(j)

    (四)跳出循环---break   和 else

        用于提前结束循环,跳出当前循环,直接走循环之后的其他代码段
        Break只能用在循环当中,在循环内部,我们通常将break用在选择判断中,因为无条件的break通常都是没有意义的。

        for i in range(1, 10000):
            print(i)
            if i == 3:
                break

        # 1
        # 2
        # 3


        循环中的else

         在循环迭代正常完成之后,执行else中的代码
         只要循环不正常结束(空迭代体,有break,有异常),就不走else

        For和while循环可以加上一个可选的else
        如果循环没有因为break而提前结束,则执行else语句体。否则不执行else语句体。

        v = int(input('请输入值:'))
        for i in range(1, 101):
            if i == v:
                print('找到了!')
                break
        else:
        print('没找到')

        不用break:
        find = False

        v = int(input('请输入值:'))
        for i in range(1, 101):
            if i == v:
                print('找到了!')
                find = True

        if not find:
            print('没找到')

         查找range(1,21)中有没有某一个数字
         使用标志位解决没有找到的问题
         tag=False
         for i in range(3,21):
             if i==2:
                 print("找到2了")
                 tag=True
                 break
         if tag==False:
             print("没找到")

         使用else解决没有找到
         只要循环不正常结束(空迭代体,有break,有异常),就不走else
         for i in range(1,21):
             if i==2:
                 print("找到2了")
                 break
         else:
             print("没找到")

         判断一个数是否是质数
         num=int(input("请输入一个数"))
         for i in range(2,num):
             if num%i==0:
                 print("不是质数")
                 break
         else:
             print("是质数")

        1. 跳出循环--- continue

            用来结束本次循环,开启下一次循环,对后续的循环没有影响
            跳出本次循环,本次循环后面的代码不再执行,继续执行下一次循环

            Continue 也只能用在循环中,continue通常是放在选择判断中

            for i in range(1, 20):
                if i % 2 ==0:
                    continue
                print(i)


                # 1
                # 3
                # 5
                # 7
                # 9
                # 11
                # 13
                # 15
                # 17
                # 19

            for i  in  range(1,101):
                 if i==2:
                     print("找到2了")
                     break
             print("其他代码段")

             判断一个数是否是质数
             num=int(input("请输入一个数"))
             tag=True
             for i in range(2,num):
                 if num%i==0:
                      说明不是质数
                     tag=False
                     print("不是质数")
                     break
             if tag:
                 print("是质数")

             continue:continue后面有代码才意义
             输出20以内的数,标注出所有的偶数
             for i in range(1,21):
                 if i%2==0:
                     print(f"{i}是偶数")
                     continue
                 print(i)


             解决游戏猜对了,跳出的问题
             realvalue=8
              while True:永远为真
              while 1:
             while True:
                 guess=int(input("请猜一个数字:"))
                 if guess==realvalue:
                     print("猜对了")
                     break
                 else:
                     print("猜错了")
                     if guess>realvalue:
                         print("猜大了,小一点吧")
                     else:
                         print("猜小了,大一点吧")
                      tag=input("是否还继续猜?y/n")
             print("游戏结束")

    (五)for循环中enumerate

         s="helloworld"
         index=0
         for i in s:
             print(i,index)
             index+=1

        s="helloworld"
         使用enumerate产生内容(索引,元素)
         索引在第一位输出
        for a,b in enumerate(s):
        print(a,b)


        enumerate()说明
        •	enumerate()是python的内置函数
        •	enumerate在字典上是枚举、列举的意思
        •	对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
        •	enumerate多用于在for循环中得到计数
        •	例如对于一个seq,得到:
        (0, seq[0]), (1, seq[1]), (2, seq[2])

        enumerate()返回的是一个enumerate对象,例如:
            seq = range(5)

            enumerate(seq)

            enumerate at 0x36e5798



            # 1
            # 3
            # 5
            # 7
            # 9
            # 11
            # 13
            # 15
            # 17
            # 19

        for i  in  range(1,101):
             if i==2:
                 print("找到2了")
                 break
         print("其他代码段")

         判断一个数是否是质数
             num=int(input("请输入一个数"))
             tag=True
             for i in range(2,num):
                 if num%i==0:
                      说明不是质数
                     tag=False
                     print("不是质数")
                     break
             if tag:
                 print("是质数")

         continue:continue后面有代码才意义
         输出20以内的数,标注出所有的偶数
             for i in range(1,21):
                 if i%2==0:
                     print(f"{i}是偶数")
                     continue
                 print(i)


         解决游戏猜对了,跳出的问题
             realvalue=8
              while True:永远为真
              while 1:
             while True:
                 guess=int(input("请猜一个数字:"))
                 if guess==realvalue:
                     print("猜对了")
                     break
                 else:
                     print("猜错了")
                     if guess>realvalue:
                         print("猜大了,小一点吧")
                     else:
                         print("猜小了,大一点吧")
                      tag=input("是否还继续猜?y/n")
             print("游戏结束")

    (六)enumerate()使用

        •	如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:
        1.	list1 = ["这", "是", "一个", "测试"]
        2.	for i in range (len(list1)):
        3.	    print i ,list1[i]
        •	1
        •	2
        •	3
        •
        •	上述方法有些累赘,利用enumerate()会更加直接和优美:
        1.	list1 = ["这", "是", "一个", "测试"]
        2.	for index, item in enumerate(list1):
        3.	    print index, item
        4.	>>>
        5.	0 这
        6.	1 是
        7.	2 一个
        8.	3 测试
        •	1
        •	2
        •	3
        •	4
        •	5
        •	6
        •	7
        •	8
        •
        •	enumerate还可以接收第二个参数,用于指定索引起始值,如:
        1.	list1 = ["这", "是", "一个", "测试"]
        2.	for index, item in enumerate(list1, 1):
        3.	    print index, item
        4.	>>>
        5.	1 这
        6.	2 是
        7.	3 一个
        8.	4 测试
        •	1
        •	2
        •	3
        •	4
        •	5
        •	6
        •	7
        •	8
        •
        ________________________________________
        补充
        如果要统计文件的行数,可以这样写:
        count = len(open(filepath, 'r').readlines())
        •	1
        •
        这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。
        可以利用enumerate():
        1.	count = 0
        2.	for index, line in enumerate(open(filepath,'r')):
        3.	    count += 1
        •	1
        •	2
        •	3

“”"

你可能感兴趣的:(=python语言和第三方包=)