Python基础讲义(四):分支结构

分支结构

0x01内容导图

0x02流程图介绍

  • 基本元素

  • 绘制要求:不能出现程序语言的语法

0x03百分制转五级计分制

  • 分支结构:语句块,冒号+缩进表示归属

    • 单分支:if语句
    • 双分支:if-else语句
    • 多分支:if-elif-else语句
  • 三元运算符:exp1 if option == True else exp2,双分支结构的简写形式

  • 示例一:输入百分制的整数成绩,输出对应的ABCDE等级

    • 流程图绘制

    • 测试驱动:嵌入式方式,测试先行
    • 代码实现:根据流程图,翻译成代码
    def convert(s):
        """
        >>> convert(85)
        'B'
        >>> convert(92)
        'A'
        >>> convert(79)
        'C'
        >>> convert(60)
        'D'
        >>> convert(0)
        'E'
        """
        level = "A"
        if s < 60:
            level = "E"
        elif s < 70:
            level = "D"
        elif s < 80:
            level = "C"
        elif s < 90:
            level = "B"
        return level
    
    if __name__ == "__main__":
        import doctest
        doctest.testmod(verbose=True)
    
    • 扩展:查找表技术,去掉大分支。先利用等级串缓存所有等级“EEEEEEDCBAA”,分别对应各个分数段;然后分数直接对10取商,该数就是等级串对应的索引位置,其实现代码修改如下(重新运行测试进行验证):
    def convert(s):
        if s < 0 or s > 100: return "invalid score"		#非法情况排出,避免第4行越界
        levels = "EEEEEEDCBAA"
        return levels[s // 10]
    

课堂练习:

​ 登录验证login(name, pwd)实现:name和pwd均为“admin”登录成功,否则登录失败

0x04日期到天数的转换

  • 示例二:输入年月日,输出当天是今年的第几天

    • 流程图绘制:学生尝试
    • 测试驱动:嵌入式方式,测试先行
    • 代码实现
    def convert2days(year, month, day):
        """
        >>> convert2days(2019, 1, 5)
        5
        >>> convert2days(2019, 2, 1)
        32
        >>> convert2days(2019, 3, 1)
        60
        >>> convert2days(2020, 3, 1)
        61
        >>> convert2days(2020, 2, 29)
        60
        >>> convert2days(2019, 12, 31)
        365
        """
        days = 0
        if month == 1:
            days = day
        elif month == 2:
            days = 31 + day
        elif month == 3:
            days = 59 + day
        elif month == 4:
            days = 90 + day
        elif month == 5:
            days = 120 + day
        elif month == 6:
            days = 151 + day
        elif month == 7:
            days = 181 + day
        elif month == 8:
            days = 212 + day
        elif month == 9:
            days = 243 + day
        elif month == 10:
            days = 273 + day
        elif month == 11:
            days = 304 + day
        elif month == 12:
            days = 334 + day
        if month > 2 and is_leap(year):
            days += 1
        return days
    
    def is_leap(y):
        return (y % 4 == 0 and y % 100 != 0) or (y % 400 == 0)
    
    if __name__ == "__main__":
        import doctest
        doctest.testmod(verbose=True)
    
    • 课后扩展:采用查找表技术,去掉大分支

0x05小结

  • 熟练掌握流程图的绘制方法
  • 熟练掌握分支结构的使用
  • 理解查找表技术,掌握去大分支的实现方法
posted @ 2020-11-18 14:07  hzy&hmcj  阅读(613)  评论(0)    收藏  举报