Python学习日记(六)


一、格式化方法:

  • format()方法

格式化函数,可以将字符串以特定格式输出,参数用{}括起来

  • 位置参数
  • 关键字参数
  • 综合位置参数和关键字参数时需要注意位置参数应该在关键字参数之前
  • 参数后面的冒号表示格式化符号的开始
  • >>> "{0} love {1}.{2}".format("I", "FishC", "com")
    'I love FishC.com'
    >>> "{a} love {b}.{c}".format(a = "I", b = "FishC", c = "com")
    'I love FishC.com'
    >>> 

习题:

  • 要求编写一个密码安全性检查的脚本check.py
  • 需求:
       低级密码要求:
    #   1. 密码由单纯的数字或字母组成
    #   2. 密码长度小于等于8位
    
       中级密码要求:
    #   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
    #   2. 密码长度不能低于8位
    
       高级密码要求:
    #   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
    #   2. 密码只能由字母开头
    #   3. 密码长度不能低于16位
    
    代码一:
    symbols = "~!@#$%^&*()_=-/,.?<>;:[]{}\|"
    chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    nums = '0123456789'
    t = 'y'
    while t == 'y':
        passwd = input('您输入的密码为空(或空格),请重新输入:')
        length = len(passwd)    
    #判断长度
        while(passwd.isspace() or length == 0):
            passwd = input('您输入的密码为空(或空格),请重新输入:')
            length = len(passwd)
        if length <= 8:
            flag_len = 1
        elif 8 < length <16:
            flag_len = 2
        else:
            flag_len = 3
        flag_con = 0
    #判断是否包含特殊字符
        for each in passwd:
            if each in symbols:
                flag_con +=1
                break
    #判断是否包含字母
        for each in passwd:
            if each in chars:
                flag_con += 1
                break
    #判断是否包含数字
        for each in passwd:
            if each in nums:
                flag_con += 1
                break
    #打印结果
        while 1:
            print("您的密码安全级别评定为:",end='')
            if flag_len == 1 or flag_con == 1:
                print("低")
            elif flag_len == 2 or flag_con == 2:
                print("中")
            else:
                print("高")
                print("请继续保持")
                break
            print("""请按以下方式提升您的密码安全级别:
        1.密码必须由数字、字母及特殊字符三种组合
        2.密码只能由字母开头
        3.密码长度不能低于16位""")
            break
        t = input("还要再测试么?(”y“继续,其他退出)")
    
    
    代码二:
    str1 = "~!@#$%^&*()_=-/,.?<>;:[]{}\|"
    has_str1 = 0
    has_num = 0
    has_alpha = 0
    t = 'y'
    while t == 'y':
            password = input("请输入需要检查的密码组合:")
            length = len(password)
            while(password.isspace() or length == 0):  # 有空格或者长度为零
                    password = input('您输入的密码为空(或空格),请重新输入:')
            for i in password:
                    if i in str1:
                            has_str1 = 1
                    if i.isdigit():  # 所有字符都是数字
                            has_num = 1
                    if i.isalpha():  # 所有字符都是字母
                            has_alpha = 1
            has =  has_str1 + has_num + has_alpha
            if length <= 8 or password.isalnum():
                    level = "低"
            if length > 8 and has ==2:
                    level = "中"
            if length >= 16 and has == 3 and password[0].isalnum():
                    level = "高"
            print("您的密码安全等级评定为:%s"%level)
            if level == "高":
                    print("请继续保持")
            else:
                    print("""请按以下方式提升您的密码安全级别:
            1.密码必须由数字、字母及特殊字符三种组合
            2.密码只能由字母开头
            3.密码长度不能低于16位""")
            t = input("还要再测试么?(”y“继续,其他退出)")
  • 总结:字符串内置方法总结
  • 字符串格式化符号

  • 格式化操作符辅助指令
  • >>> '%5.1f' % 27.678
    ' 27.7'
    >>> '%.2e' % 27.6789
    '2.77e+01'
    >>> '%10d' % 5
    '         5'
    >>> '%-10d' % 5
    '5         '
    >>> '%010d' % 5
    '0000000005'
    >>> '% # x' % 100
    '0x64'
  • 字符串转义字符含义

二、列表

  • 列表、元组、字符串统称为序列,序列有以下共同点:
    • 都可以通过索引得到每一个元素;
      默认索引值总是从0开始(当然灵活的Python还支持负数索引);
      可以通过分片的方法得到一个范围内的元素的集合;
      有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符);
  • 列表、元组、字符串的转换
    • list([iterable]) 把可迭代对象转换为列表;
      tuple([iterable]) 把可迭代对象转换为元祖;
      str(obj) 把对象转换为字符串;
  • 迭代
    • 所谓迭代,是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
  • 一些重要的内置函数:
    1)list():把一个可迭代的对象转换为列表
    2)tuple([iterable]):把一个可迭代的对象转化为元组
    3)str(obj):把obj对象转化为字符串
    4)max(),min():返回序列或者参数集合中的最大或最小值
    5)sum(iterable[,start=0]):返回序列iterable和可选参数start的总和
    6)sorted():返回排序的列表,默认从小到大7)reversed():翻转
  • >>> list1 = [1,2,3,4,5]
    >>> reversed(list1)
    
    >>> for each in reversed(list1):
        print(each, end=',')
    
        
    5,4,3,2,1,

    8)enumerate():枚举,生成由每个元素索引值和元素组成的元组

    >>> str1 = "FishC"
    >>> for each in enumerate(str1):
        print(each)
    
        
    (0, 'F')
    (1, 'i')
    (2, 's')
    (3, 'h')
    (4, 'C')
    >>> 

    9)zip():返回各个参数的序列组成的元组

    >>> list1 = [1, 3, 5, 7, 9]
    >>> str1 = "FishC"
    >>> for each in zip(list1, str1):
        print(each)
    
        
    (1, 'F')
    (3, 'i')
    (5, 's')
    (7, 'h')
    (9, 'C')
    >>>