• Python笔记


    一、数据类型

    1.基础

    0渔:( **kwargs) 传:1. name = ...
                         2. 字典 **{,,,,}
    ( *args)  可变长度的列表(元祖)
    ( **kwargs) 可变长度的字典
    *[] 遍历元素
    
    print 默认换行,如需取消,可更改为 print('aaa',end = '	')
    
    enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
    
    变量:
        1.变量只是一个门牌号,无任何实际意义
        2.同样的值不会被创建多次,再有变量则直接指向它
    
    一、基本数据类型:
        python 函数中 start、end:均为 [ ) ,从0开始
    
    1.字符串 str :(11个魔法)
    
        #字符串一经创建不可修改,所有修改和拼接都产生新的字符串(在内存中连续)
    	1. 加法:组合
    	2. 乘法:重复n次
    	3. input() 接收到的都是字符串
    	4. int() 可将字符串强制转换成数字
    	5. str() 可将某数据类型强制转换成字符串    -- 只在外面加了 ''
    	6. in 和 not in 成员运算符
        ################### 7个基本魔法 ##################
    	join replace split(不保留分割) find strip(去除) upper lower
    	-- 首字母大写  .capitalize()
    	-- 变小写  casefold   lower
    	-- 变大写  upper
    	-- 大小写 翻转 swapcase
    	-- 在某长度居中 center
    	-- 放左边 ljust
    	-- 放右边 rjust
    	-- 去除 (前面后面)所有空格、
    、	(或指定字符,放括号里传进去)  strip、lstrip、rstrip
    	-- 子字符串 在原字符串中有几个 count
    	-- 判断开头、结尾 startswith endswith
    	-- 索引子字符串位置  index find
    	-- 格式化 format  将字符串中占位符{xx} 赋值  ,, 用法还挺多(模板输出必用!方便!)
    	    -- 赋值法
    	        -- test = '可爱的{name}最喜欢在{location}干{hobby}'
    	        -- test.format(name = name, location = location,hobby = hobby)
    	    -- 顺序法
    	        -- test = '可爱的{}最喜欢在{}干{}'
    	        -- .format(name,location,hobby)
    	-- 判断是否全是 字母/汉字 、数字 isalnum
    	-- 判断是否全是 字母/汉字 isalpha
    	-- 判断是否全是 数字      isdigit   isdecimal 还一个
    	-- 判断是否存在 特殊
     	 字符  isprintable
    	-- 判断是否全是空格 isspace
    	-- 制表  expandtabs()  将制表符 展开为n个空格
    	    -- 最后加,巨他妈方便! 将 	 填充为 你想要的多少个空格
     ★ -- join- 将..拼接符 插入字符串之间 (产生新的,需要用新变量存储,原来字符串的统统不变)  join
    	-- 字符替换 之 replace
    	    -- test.replace('aa','11',2)
    	        # 将'aa'替换为'11',只替换前2个,默认为替换全部
    	        # 一次只能替换1种
    
    	-- 字符替换 之 translate
    	    --先创建翻译法则 m = str.maketrans('aeiou','12345')
    	    --再按照法则翻译 v = test.translate(m)
    	-- 字符串分割
    	    -- 普通分割
    	          partition('s') 按第一个's'分割成3份    ('s'保留)
    	         rpartition('s') 按倒数第一个's'分割成3份('s'保留)
    	          split('s',8)  从左往右找8个's'进行分割('s'不保留)(不传个数时,默认分割所有's')
    	          -- 超级方便的接受方法:v1,v2,..., = test.split('f')
    	         rsplit('s',8)  从右往左找8个's'进行分割('s'不保留)
    	    -- 按行分割
    	        splitlines(True/False用于选择是否保留换行,钉在前面)
    
        ##################### 5个灰魔法 ######################
    
        -- 索引
            [3]    第4个元素
        -- 切片   [ )(左闭右开) 结果仍为字符串而非元素--字符
            [0:3]   第1-3 个
            [0:-1]  第1-最后(-1不包括)
            [2: ]  第3个 - 最后全部
        -- 获取长度
             len(test)  或   .len()
            (字符串长度 / 元素个数)
        -- for循环
            for A in test :
                print(A)
        -- range
            用于创建连续的数字,或固定步长的数字
            range(100)  : 0,1,2,...,99
            range(1,100) : 1,2,3,...,99
            range(0,100,5) :  0,5,10,..,95
            range(100,0,-1) :  从后往前
    
    2.数字 int :
    	1. 次方:**
    	2. 取余:% (可用于判断奇偶数)
    	3. 取商://
    	4. 加法求和时用 sum1 , 防止覆盖掉sum()函数功能
    
    	################## 数字的 方法 #################
    
    	1. bit_length()     获取数字占了几位
    
    3.布尔值 bool :
        1.True False
            -- True : '有东西' 、 数字不为0
            -- False : '   '  、  0
    
        2.开头必须大写
    
    4.列表 list :
    -- li = [ 1,2,'a','b', [1,'a'] ,2 ]
        1.元素也可为列表,子列表整体为一个元素
        2.可用 [ :] 切片 ,得到的结果仍为列表
            取最后一个:[-1]
        3.支持 for循环、while循环 : 遍历每个'元素'
        4.支持 in 操作,查找元素
        4.修改:列表可被修改(内存中可不连续地存)
            -- 不可修改: 数字,字符串,元祖
            -- 可修改:  列表,字典,数组,集合
        5.删除:del
        6.强制转换:list('asdf')
            -- ['a','s','d','f']
        7.列表->字符串:
            1.列表元素都是字符串:
                -- ''.join(li)
            2.列表元素有数字:
                -- 写for循环,v = v + str(s)
    
        ############### list类:方法 (list可修改,不可用新变量接收)#################
     ★ 1. li.append('ss')
                -- 将'ss'整体 追加为列表最后一个元素
        2. li.clear()
                -- 清空列表
        3. li.copy()
                -- 浅拷贝
                -- v = li.copy()
        4. li.count('ss')
                -- 计数元素'ss'有几个
     ★ 5. li.expand(可迭代对象-- 如:列表,字符串)
                -- 扩展列表(取可迭代对象里的元素)
        6. li.index('ss')
                -- 索引元素下标(位置),找到第一个就结束
                -- 可传入 start、end 来圈定区间
     ★ 7. li.insert(2,'ss') 下标,值
                -- 插入元素至指定位置
        8. li.pop(下标)
                -- 删除,缺省默认删除最后一个元素
                -- 传入下标,删除指定位置的元素
                -- 可接收所删除的元素的值 v = li.pop()
        9. li.remove('ss')
                -- 删除指定的元素,找到第 一个就结束
                -- 不可缺省,不可接收
        #### 删除 ####
        #### pop remove del clear ####
        10. li.reverse()
                -- 翻转,将列表元素顺序翻转
        11. li.sort()
                -- 排序,缺省:从小到大对元素排序
                -- ( reverse = True ):从大到小排
                -- 列表元素类型必须全是数字
    
    
    5.元祖 tuple :
        -- tu = ( 11,'ss',[],(),22,33 , )
        -- 有序,可理解为不可修改的列表 -- 元祖的一级元素不可被 修改、增加、删除
                                   -- 二级或更高的可以被修改
        -- 想修改时可 与 list灵活转换
        1. 支持 索引、切片
        2. 支持 for循环
        3. str list tuple 三个可迭代对象 :可互相强制类型转换,join可用
    
        ######### 方法 #########
        1. tu.count('ss')
            -- 计数元素 'ss' 有几个
        2. tu.index('ss')
            -- 索引元素 'ss' 位置
    
    
    6.字典 dict :     按哈希表保存
        -- dic = {
            'v1' : 'k1' ,  # 键值对
            'v2' : 'k2'
            }
        -- 无序,可修改
        -- 字典的key 不可以是 :列表 字典
        -- 字典的value :任何值都可以
    
        -- 索引:(取值)
            -- v = dic['v1']
            -- 结果:v =
            -- 若没有,报错
        -- 删除:
            -- del:
                -- del dic[key]
        -- 不支持 while 循环
        -- 支持 for 循环
            -- 循环下一级key:
                -- for i in dic:
                -- for i in dic.keys() :
            -- 循环下一级value:
                -- for i in dic.values() :
            -- 循环下一级键值对:
                -- for i,j in dic.items() :
    
        ################### 字典的 方法 ###################
        重要:keys values items get update
        #### 普通方法 ####
        1. dic.clear()
            -- 清空
        2. dic.copy()
            -- 浅拷贝
     ★ 3. dic.get(key,若没有返回的值)
            -- 索引取值
            -- 若没有,不报错,返回指定值
     ★ 4. dic.keys()  dic.values()  dic.items()
            -- 返回所有信息,为特殊类型,类似于可循环的列表
        5. dic.pop(key,若没有返回的值)
            -- 删除key对应的值
            -- 所删除的值可用 v= 接收
            -- 若没有,不报错,返回指定值
        6. dic.popitem()
            -- 随机删一个键值对
        7. dic.setdefalt(key,value)
            -- 设置一个新键值对的默认值(可理解为添加一个键值对)
            -- 若该key已存在,则不再设置
            -- 可用 v= 接收到该key对应的当前值
     ★ 8. dic.update(键值对或字典)
            -- 更新字典元素
            -- 无则添加,有则覆盖
            -- 第二种写法( key1=value1, key2=value2 )
    
        #### 静态方法 ####
        1. dict.fromkeys(序列,value)
            -- 创建字典,{
                          序列的每个元素 :统一的值
                          序列的每个元素 :统一的值
                          ...
                        }
            -- 序列可为: 列表、字符串 等
    
    
    
    
    ######################## 整理 ###########################
    
    一、数字
        1. int()
    
    二、字符串
        1. replace find join strip split startswith upper format
    
    三、列表
        1. append extend insert
        2. 索引 切片 循环
    
    四、元祖(不可修改的列表)
        ★ 一级元素不能被修改 增加 删除
        1. count index 都不重要
        2. 索引 切片 循环
    
    五、字典(键不可修改,值可修改)
        ★ 无序不能切片,可修改
        1. get update keys values items
        2. for循环 索引
    
    六、布尔值
    
        1. bool()
        2. False值:0 None '' [] () {}
    
    
    ######################## 变量、数据类型 总结 ###########################
    
    -- 是否可变:
    1.可变:列表,字典
    2.不可变:字符串,元祖
    
    -- 访问顺序:
    1.顺序访问:字符串,列表,元祖
    2.映射访问:字典(访问速度快,但占用内存多)
    
    -- 存放元素个数:
    1.原子类型:数字,字符串
    2.容器类型:列表,元祖,字典
    
    
    
    
    二、逻辑:
    1.条件:
    	1. 要加冒号
    	2. elif:
    	3. and 与 or 优先级一样,严格按照先后顺序执行
    2.循环:(也要加冒号)
    	1. 死循环:while True:
    	2. 循环10次:
    	
    		count = 0
    		while count <10 :
    			count +=1
    
    			...
    			...
    			
    3. continue后的内容不执行,可用于跳过某个特殊条件
    4. break 跳出循环
    
    

    2.补充

    ####### 知识点 #######
    
    # 1. 输入输出
    
    '''
    name = input ('ID:')
    password = input('PassWord:')
    print("hello world !")
    '''
    
    # 2. 数字
    
    '''
    a1 = 2
    a2 = 3
    a3 = a1 / a2
    a4 = a1 ** a2
    a5 = a2 % a1
    print( '除法:' , a3 , '
    ' 	+	'次方:', a4 , '
    ' 	+	'取余:' , a5 , '
    ' )	# 最好直接写3个 print()	
    '''
    
    ######## 练习题 #######
    
    
    # 考点:
    # 1. if条件语句
    # 2. while循环
    # 3. 奇偶数
    
    
    # 1. 使用while循环输出 123456 8910
    
    '''
    count = 0
    while count < 10 :
    	count += 1		 	# 先写,容易忘(此时,count已经+1了,相当于从1开始)
    	if count != 7 :
    		print(count)
    	else :
    		pass
    '''
    
    # 2. 求1-100所有数的和
    
    '''
    count = 0
    sum1 = 0
    while count < 100 :
    	count += 1
    	sum1 = sum1 + count
    print(sum1)
    '''	
    
    # 3. 输出1-100所有奇数
    '''
    count = 0
    while count < 100 :
    	count += 1
    	if count % 2 == 1 :
    		print(count)
    '''	
    
    # 4. 输出1-100所有偶数
    
    '''
    count = 0
    while count < 100 :
    	count += 1
    	if count % 2 == 0 :
    		print(count)
    '''
    
    # 5. 求1-2+3-4+5...99
    
    '''
    count = 0
    sum1 = 0
    while count < 99 :
    	count += 1
    	if count % 2 == 1 :
    		sum1 = sum1 + count
    	else :
    		sum1 = sum1 - count
    print(sum1)
    '''
    	
    # 6. 用户登录(三次机会)
    
    '''
    count = 0
    while count < 3:
    	count += 1
    	id = input ('please input your id:')
    	password = input ('please input your password:')
    	if id == 'shendaw' and password == '163':
    		print ('login successful!')
    		break
    	else :
    		print ('login failed!')
    '''
    
    
    ################### 字符串 ####################
    
    ################ 练习题 ###############
    # 例题 . 用户输入字符串,打印其每个字符及其对应的索引
    # 题眼:以len作为range
    '''
    test = input('>>>')
    for i in range(len(test)) :
        print(i,test[i])
    '''
    ### 1.执行 python 脚本的2种方式
    
    # -- 1. 编辑好文件后 运行文件
    # -- 2. python 解释器 现场交互 写一句运行一句
    
    
    ### 2. 简述 位、字节 的关系
    
    # -- 1字节 = 8位
    
    
    ### 3. 简述 ascii unicode utf8 gbk 关系
    
    # -- ascii : 1字节 (7位 0-126)
    # -- unicode : 万国码 字符集 至少2字节
    # -- utf8 :Unicode压缩版 编码规则 汉字3字节
    # -- gbk :汉字编码规则 2字节
    
    ### 10. 字符串操作
    
    # a. 移除两头空格
    '''
    name = '  aleX'
    v = name.strip('a')
    print(v)
    '''
    # b. 判断开头是否为 al
    '''
    name = 'aleX'
    v = name.startswith('al')
    print(v)
    '''
    # c. 判断结尾是否为 X
    '''
    name = 'aleX'
    v = name.endswith('X')
    print(v)
    '''
    # d. 将 l 替换为 p
    '''
    name = 'aleX'
    v = name.replace('l','p')
    print(v)
    '''
    # e. 根据 l 分割 (分割后变为列表类型)
    '''
    name = 'aleX'
    v = name.split('l')
    print(v,type(v))
    '''
    # f. 变大写
    '''
    name = 'aleX'
    v = name.upper()
    print(name,v)
    '''
    # g. 变小写
    '''
    name = 'aleX'
    v = name.lower()
    print(name,v)
    '''
    # h. 输出第2个字符
    '''
    name = 'aleX'
    v = name[1]
    print(name,v)
    '''
    # i. 输出后2个字符
    '''
    name = 'aleX'
    v = name[-2:]
    print(v)
    '''
    # j. 输出 e 下标
    '''
    name = 'aleX'
    v = name.find('e')
    print(v)
    '''
    # k. 获取子序列,仅不包含最后一个字符
    # 法一:
    '''
    name = input('>>>')
    v = name[:-1]
    print(v)
    '''
    # 法二:
    '''
    name = input('>>>')
    l = len(name)
    for i in range(0,l-1) :
        print(name[i])
    '''
    
    ### 21. 字符串是否可迭代,如是,用for循环
    '''
    name = input('>>>')
    for i in name :
        print(i)
    '''
    
    ### 22. 用下划线 连接 字符串里的字符
    '''
    name = input('>>>')
    v = '_'.join(name)
    print(v)
    '''
    
    ### 22. 用下划线 连接 列表里的元素
    '''
    name = ['sfdsdf','asfd','safggs']
    v = '_'.join(name)
    print(v)
    '''
    
    ### 23. range 在 python2 和 python3 里的区别:
    
    # python2 里 : 直接全部创建在内存里
    # python3 里 : 循环时才一个一个创建
    '''
        for i in range(100,0,-1):
            print(i)
    '''
    
    ### 24. 整数加法计算器:
    '''
    n = input('>>>')
    l = n.split('+')
    n1 = int( l[0].strip() ) 
    n2 = int( l[1].strip() )
    re = n1 + n2
    print(l,re)
    '''
    
    '''
    test = 'sdkflslkfjsslk'
    v = test.split('s',1)
    print(v)
    '''
    
    
    ### 25. 统计 数字 、 字母 个数:
    
    '''
    num = 0
    alpha = 0
    test = input('>>>')
    for i in test :
        if i.isdecimal() :
            num += 1
        if i.isalpha():  
            alpha += 1
    print(num,alpha)
    '''
    
    ### 27. 制作模板
    '''
    name = input('name:')
    location = input('location:')
    hobby = input('hobby')
    result = '可爱的' + name + '最喜欢在' + location + '干' + hobby
    print(result)
    '''
    
    '''
    name = input('name:')
    location = input('location:')
    hobby = input('hobby:')
    
    result = '可爱的{0}最喜欢在{1}干{2}'
    result = result.format(name,location,hobby)
    print(result)
    '''
    
    ### 28. 制作随机验证码,不区分大小写
    
    
    
    
    ### 29. 过滤敏感词汇
    '''
    test = input('>>>')
    new = test.replace('苍老师','***')
    new = new.replace('东京热','***')
    print(new)
    '''
    
    ### 30. 制作表格 ,循环输入,检测到输入为 q 或 Q 停止录入,超过20字符以20个计
    '''
    result = 'name:	'.expandtabs(25) + 'password:	'.expandtabs(25) + 'email:	
    '.expandtabs(25)
    while True :
    
        name = input('name:')[:20] + '	'
        if name.strip().lower() == 'q' :
            break
        name = name.expandtabs(25)
    
        password = input('password:')[:20] + '	'
        password = password.expandtabs(25)
    
        email = input('email:')[:20] + '	
    '
        email = email.expandtabs(25)
    
        result = result + name + password + email
    
    print(result)
    '''
    
    # 改进!牛逼!用了模板format 和 expandtabs最后加 !!!
    '''
    template = '{}	 {}	 {}	
    '
    result = template.format('name:','password:','email:')
    while True :
        name = input('name:')[:20]
        if name.strip().lower() == 'q' :
            break
        password = input('password:')[:20]
        email = input('email:')[:20]
        result = result + template.format(name,password,email)
        result = result.expandtabs(25)
    print(result)
    '''
    
    
    
    
    
    

    3.总习题20个

    ################# 1. 用 下划线 将列表元素拼接为一个字符串
    
    # li = ['a','b','k']
    # v = '_'.join(li)
    # print(v)
    
    ################# 3. 列表操作
    
    # li = ['a','b','k']
    # del li[2]
    # print(li)
    
    ################ 5. 元祖操作
    # 1.计算元祖长度并输出
    # 2.获取元祖第二个元素并输出
    # 3.获取1-2个元素并输出
    # 4.for循环输出元素
    # 5.for,len,range输出元祖索引
    # 6.enumrate输出元素和序号(序号10开始)
    
    # tu = ('a','b','c')
    # v = enumerate(tu,10)
    # for i,j, in v :
    #     print(i,j)
    
    ################ 6. 元祖操作
    
    # tu = ('alex',[11,22,{'k1':'v1','k2':['age','name'],'k3':(11,22,33)},44])
    #
    ## tu[1][2]['k2'].append('seven')
    # tu[1][2]['k3']=(111111)
    #
    # print(tu)
    
    
    
    ######################################### 10. 输出商品列表
    # 用户输入序号,显示用户选中的商品
    # 商品 li = ['手机','电脑','鼠标','键盘']
    # 要求: 允许用户添加商品
    
    # li = ['手机','电脑','鼠标','键盘']
    # while True:
    #     for i in range(len(li)) :
    #         print(i,li[i])
    #     n1 = input('please choose what you want:')
    #     if n1.isdecimal() : # 判断格式是否正确
    #         n1 = int(n1)    # 强制转换为数字
    #     else :
    #         print('the content format is wrong,please enter again!')
    #         continue
    #     print('the item you selected:', li[n1])
    #
    #     n2 = input('please input the item you want to add:')
    #     if n2 != '' :   # 用户输入的 n2非空,才添加
    #         li.append(n2)
    
    ############################################## 11. 用户交互显示 n级联动选择
    # 如: 省市县
    # 要求: 允许用户增加内容
    # 南京市 = [1,2,3]
    # 宿迁市 = [4,5,6]
    # 杭州市 = [7,8,9]
    # 金华市 = [10,11,12]
    #
    # 江苏省 = [南京市,宿迁市]
    # 浙江省 = [杭州市,金华市]
    #
    # 中国 = [江苏省,浙江省]
    # for i in 中国 :
    #     print(i)
           
    # 1. 字典法:
    dic = {
             '江苏省':{
                        '南京市':[1,2,3],
                        '苏州市':[4,5,6],
                        '宿迁市':[7,8,9]
                     },
             '浙江省':{
                        '杭州市': [1,2,3],
                        '金华市':[4,5,6]
                     },
             '广西省':{
                        '南宁市': [1,2,3],
                        '桂林市':[4,5,6],
                        '贵港市':[7,8,9]
                     }
    }
    
    province = input('输入省:')
    for i in dic[province]:
        print(i)
    
    city = input('city:')
    for i in dic[province][city]:
        print(i)
    
    
    ############################################## 12. 列举布尔值是 False的所有值
    
    # 0 '' False
    # [] () {}
    # None
    
    # #################################### 13. 对 2个列表:
    #     l1 = [11,22,33]
    #     l2 = [22,33,44]
    #     a. 获取内容相同的元素列表
    #     b. l1有,l2没有的元素列表
    #     c. l1没有,l2有的元素列表
    #     d. 获取内容都不相同的元素
    
    # l1 = [11,22,33]
    # l2 = [22,33,44]
    # v = []
    # for i in l1 :
    #     if i in l2:
    #         v.append(i)
    # print(v)
    
    # l1 = [11,22,33]
    # l2 = [22,33,44]
    # v = []
    # for i in l1 :
    #     if i not in l2:
    #         v.append(i)
    # print(v)
    
    # l1 = [11,22,33]
    # l2 = [22,33,44]
    # v = []
    # for i in l2 :
    #     if i not in l1:
    #         v.append(i)
    # print(v)
    
    # l1 = [11,22,33]
    # l2 = [22,33,44]
    # v = []
    # for i in l1 :
    #     if i not in l2:
    #         v.append(i)
    # for i in l2 :
    #     if i not in l1:
    #         v.append(i)
    # print(v)  18.48
    
    ########################################## 14. 利用 for循环和range输出:
    #     a. for循环从大到小输出 1 - 100
    #     b. for循环从小到大输出 100 - 1
    #     c. while循环从大到小输出 1 - 100
    #     d. while循环从小到大输出 100 - 1
    
    # for i in range(1,101) :
    #     print(i)
    
    # for i in range(100,0,-1) :
    #     print(i)
    
    # count = 0
    # while count < 100 :
    #     count += 1
    #     print(count)
    
    # count = 101
    # while count >1 :
    #     count -= 1
    #     print(count)
    
    ####################################################### 15. 购物车
    #     功能要求:
    #         要求用户输入总资产
    #         显示商品列表,用户根据序号选择商品加入购物车
    #         购买,若商品总额大于资产余额不足,否则购买成功
    #     goods = [
    #         {'name':'电脑','price':1999}
    #         {'name':'鼠标','price':10}
    #         {'name':'键盘','price':20}
    #         {'name':'老婆','price':998}
    #     ]
    
    # goods = [
    #     {'name': '电脑', 'price': 1999},
    #     {'name': '鼠标', 'price': 10},
    #     {'name': '键盘', 'price': 20},
    #     {'name': '老婆', 'price': 998}
    # ]
    # for i in goods :
    #     n = goods.index(i)
    #     print(n,i)
    # n1 = input('输入资产:')
    # n1 = int(n1)
    # n2 = input('输入编号:')
    # n2 = int(n2)
    # if n1 >= goods[n2]['price'] :
    #     print('purchase success!')
    # else :
    #     print('insufficient balance!')
    
    ######################################## 16. 分页显示内容
    # a. 通过for循环创建301条数据,数据类型不限,如:
    #     alex-1      alex1@live.com      pwd1
    #     alex-2      alex1@live.com      pwd1
    #     alex-3      alex1@live.com      pwd1
    #     alex-4      alex1@live.com      pwd1
    #     ...
    # b. 提示用户输入页码,显示该页数据
    #
    # 注意:每页显示10条数据
    #     若输入的不是十进制数字则提示格式错误
    
    # 1.字符串模板法:
    # template = 'alex-{}	 alex{}@live.com	 pwd{}'
    # test = []
    # for i in range(1,302) :
    #     v = template.format(i,i,i)
    #     test.append(v)
    # n1 = input('page:')
    # n1 = int(n1)
    # for i in range(10*n1-10, min(10*n1,301) ) :
    #     print(test[i])
    
    # 2.字典法:
    # li = []
    # for i in range(301):
    #     temp = {'name':'alex'+str(i),
    #             'email':'alex'+str(i)+'@163.com',
    #             'pwd':'pwd'+str(i)
    #             }
    #     li.append(temp)
    # page = input('page:')
    # page = int(page)
    # for i in range((page-1)*10,min(301,page*10)) :
    #     print(li[i])
    
    ################################################# 17. 数字 1,2,3,4,5,6,7,8
    # 能组成多少个互不相同且无重复数字的 2位数
    
    # li = [1,2,3,4,5,6,7,8]
    # count = 0
    # for i in li :
    #     for j in li :
    #         if i != j :
    #             count += 1
    # print(count)
    
    ################################################ 18. 用 for循环和range输出 9*9 乘法表
    
    # str0 = ''
    # for j in range(1,10) :
    #     for i in range(1,10):
    #         if i <= j :
    #             r = i*j
    #             str0 += str(i)+'*'+str(j)+'='+str(r)+'	'
    #     print(str0)
    #     str0 = ''
    
    
    # for j in range(1,10) :
    #     for i in range(1,10):
    #         if i <= j :
    #             r = i*j
    #             print(i,'*',j,'=',r,end = '	')
    #     print('')
    
    
    
    ################################################ 19. 找出一列表中任 2元素相加 =9的元素集合 [(4,5),(3,6)]
    
    # nums = [2,7,11,15,1,8,7]
    # r = []
    # for i in nums :
    #     for j in nums :
    #         if i!=j and i+j == 9 :
    #             r.append((i,j))
    # print(r)
    
    ############################################### 20. 百钱买百鸡
    # 公鸡1只 5元
    # 母鸡1只 3元
    # 小鸡1只 1/3元
    # 要求:100元买100只鸡,三种都要有
    # 问:各买几只?
    
    # for a in range(1,20) :
    #     for b in range(1,67) :
    #         for c in range(1,98) :
    #             if 5*a + 3*b + c/3 == 100 and a+b+c == 100 :
    #                 print((a,b,c))
    
    
    
    
    

    4.集合

    1.集合:(set : 可变,不可修改)
            (frozenset : 不可变集合)
        1.无序
        2.元素必须是不可修改类型
        3.元素不同(相同的元素无效)
    
    2.应用:
        简单去重:(会打乱顺序)
            强制转换为集合,再转换回去
    
    3.set方法:
    
        1. 添加1个元素
            -- s.add()
    
        7. 添加多个元素
            -- s1.update([1,2,3])
    
        2. 清空
            -- s.clear()
    
        3. 拷贝
            -- s.copy()
    
        4. 删除(随机删一个元素)
            -- s.pop()
    
        5. 删除(指定元素)(不存在会报错)
            -- s.remove('s')
    
        6. 删除(指定元素)(不会报错)
            -- s.discard('s')
    
        7. 取交集
            -- s3 = s1 & s2
            -- s3 = s1.intersection(s2)
    
        8. 取并集
            -- s3 = s1 | s2
            -- s3 = s1.union(s2)
    
        9. 取差集(s1 - 相同部分)
            -- s3 = s1 - s2
            -- s3 = s1.difference(s2)
    
        10. 交叉补集(s1+s2-相同部分)(互不相同部分)
            -- s3 = s1 ^ s2
            -- s3 = s1.symmetric_difference(s2)
    
        11. 判断有无交集
            -- v = s1.isdisjoint(s2)
    
        12. 判断s1是否为s2子集
            -- v = s1 <= s2
            -- v = s1.issubset(s2)
    
        13. 判断s1是否为s2父级
            -- v = s1 >= s2
            -- v = s1.issuperset(s2)
    
    

    二、字符串格式化

    一、% 方法
    
    
        s = 'i am %s , my age is %d'  %('shendaw',22)
    
            1. + 尽量不用,会开辟内存空间,效率低
    
            2. %s 万能
                -- %.4s  (截取字符串前4位)
    
            3. %d 整型数字
    
            4. %f 浮点数(默认小数点后取6位)
                -- %.2f  (小数点后取2位)
    
            5. %% 百分号
    
    
    
    二、format 方法
    
        # 一般方法
        --  s = 'i am {} , my age is {}' .format('shendaw',22)
    
        # 元祖索引方式取值
        --  s = 'i am {1} , my age is {0}' .format(22,'shendaw')
        --  s = 'i am {1} , my age is {0}' .format(*(22,'shendaw'))
        --  s = 'i am {1} , my age is {0}' .format(*[22,'shendaw'])
    
        # 字典方式取值
        --  s = 'i am {name} , my age is {age}' .format(name='shendaw',age=22)
        --  s = 'i am {name} , my age is {age}' .format(**{'name':'shendaw','age':22})
    
        # 强制转换类型
        --  s = 'i am {:s} , my age is {:d}' .format('shendaw',22)
    
    

    三、函数

    1. 函数与过程:
            过程:没有返回值的函数
    
    2. 啥时候用函数:
            1. 减少重复代码 (有超过两次的重复)
            2. 保持一致性(易维护)
            3. 增强可扩展性
            4. 封装一个功能
    
    3. 出现同名的函数:
            前面的都会被覆盖掉,只有最后一个生效
    
    4. 遇到第一个return即结束
    
    5. def jj (x,y,z=6)
            z的缺省值为6
    
    6. 可变长度参数:
    
        def jj (x,y,*args)  #可变长度的列表(元祖)
        def jj (x,y,**kwargs) #可变长度的字典
    
        传参:
        def jj (x,y,z):
    
        jj( *[1,2,3] ) #遍历取元素
    
    
    

    四、刷题 -- 剑指offer

    ''' 3. 输出任一重复的数字 '''
    
    s = input('please input the figers:')
    li = s.split(' ')
    
    print(li)
    
    ''' 50. 输出第一个无【重复】的字符 '''
    
    # 1. 用列表自带的count方法----代码最简单
    # s = input('please input the string:')
    # s = list(s)
    # for item in s :
    #     if s.count(item) == 1 :
    #         print(item)
    #         break
    
    # 2. 构造辅助哈希表(字典)----时间复杂度最小
    # s = input('please input the string:')
    # dic = {}
    # # 创建哈希表
    # for item in s :
    #     dic.update({item:0})
    # # 向哈希表填值
    # for item in s :
    #     dic[item] += 1
    # # 以哈希表辅助寻找次数 =1的字符
    # for item in s :
    #     if dic[item] = 1 :
    #         print(item)
    #         break
    
    # 3. 创建两个容器,一个放不同的,一个放重复的。
    #    s1-s2得无重复的元素集合
    
    # s = input('please input the string:')
    #
    # s1 = []
    # s2 = set()
    # for item in s:
    #     if item not in s1 :
    #         s1.append(item)
    #     else :
    #         s2.add(item)
    # for item in s2:
    #     s1.remove(item)
    #
    # print(s1[0])
    
    

    五、刷题 -- 字节跳动 -- leetcode

    # 3. 无重复字符的最长子串
    
    # v = input('请输入字符串:')
    # def find_max_length_from_i(v) :
    #     l = []
    #     for i in range(len(v)) :
    #         v_new = []
    #         for j in range(i,len(v)) :
    #             if v[j] not in v_new :
    #                 v_new.append(v[j])
    #             else:
    #                 l.append(len(v_new))
    #                 break
    #             j += 1
    #         i+=1
    #     r = l.sort()
    #     r = l[-1]
    #     return r
    #
    # r = find_max_length_from_i(v)
    # print(r)
    
    ############## 法二
    # v = input('请输入字符串:')
    # def hhh(v) :
    #
    #     t2 = []
    #     for i in range(len(v)):
    #         t1 = []
    #         cnt= 0
    #         for j in range(i,len(v)):
    #
    #             if v[j] not in t1:
    #                 t1.append(v[j])
    #                 cnt += 1
    #             else:
    #                 break
    #             j += 1
    #         t2.append(cnt)
    #         i += 1
    #     return max(t2)
    #
    # r = hhh(v)
    # print(r)
    
    '''
     10/9
    '''
    ''' 1. 分类 -- 通过 '''
    # test = input('please input the string:')
    # res = 0
    # n = len(test)
    # for j in range(n) :
    #     temp = []
    #     for i in range(j,n) :
    #         if i < n-1 :
    #             if test[i] not in temp :
    #                 temp.append(test[i])
    #             else :
    #                 len_temp = len(temp)
    #                 if len_temp > res :
    #                     res = len_temp
    #                 break
    #         else :
    #             if test[i] not in temp :
    #                 temp.append(test[i])
    #                 len_temp = len(temp)
    #                 if len_temp > res :
    #                     res = len_temp
    #             else:
    #                 len_temp = len(temp)
    #                 if len_temp > res :
    #                     res = len_temp
    # print(res)
    ''' 2. flag -- 未通过 '''
    # test = input('please input the string:')
    # res = 0
    # n = len(test)
    # for j in range(n) :
    #     temp = []
    #     flag = 0
    #     for i in range(j,n) :
    #         if i == n-1 or test[i] in temp :
    #             flag = 1
    #         if test[i] not in temp :
    #             temp.append(test[i])
    #         if flag == 1 :
    #             len_temp = len(temp)
    #             if len_temp > res:
    #                 res = len_temp
    #             break
    # print(res)
    
    ''' 3. 实时更新 -- 未通过 '''
    # test = input('please input the string:')
    # res = []
    # for j in range(len(test)) :
    #     temp = []
    #     for i in range(j,len(test)) :
    #         if test[i] not in temp :
    #             temp.append(test[i])
    #             print('temp:',temp)
    #             print('res:',res)
    #             if len(temp) > len(res) :
    #                 res = temp
    #                 print('更新!')
    #         else :
    #             break
    
    
    
    
    

    六、刷题 -- 字节跳动 -- 牛客网

       ''' 
            血的教训:面试题
            # 题目:将数组nums中所有0放到结尾去
            # 错因:删除导致循环溢出、下标漏掉元素
            # 经验:删除、循环溢出、下标漏元素 ———— 创建新容器
       '''
    
    # nums = [1,0,2,4,6,0,0,3]
    # res = []
    # cnt = 0
    # for i in range(len(nums)) :
    #     if nums[i] != 0 :
    #         res.append(nums[i])
    #     else :
    #         cnt += 1
    # for i in range(cnt) :
    #     res.append(0)
    #
    # print(res)
    
    
    '''
    1、万万没想到之聪明的编辑
    '''
    ####### 1. 删除法 - 失败 ######
    
    # test1 = input('请输入字符串:')
    # test1 = list(test1)
    # for i in range(len(test1)-2):
    #     if test1[i] == test1[i+1]:
    #         if i+2<len(test1)-1 and test1[i+2] == test1[i+1]:
    #             test1.pop(i+2)
    #         elif i+3<len(test1)-1 and test1[i+2] == test1[i+3]:
    #             test1.pop(i+2)
    # print(test1)
    
    ####### 2. 添加法 -成功 ######
    
    # 分次输入 — 简单
    # n = int(input())
    # while n:
    #     test1 = input()
    #     test1_new = []
    #     for i in range(len(test1)):
    #         if i>=2 and test1[i-2] == test1[i-1]:
    #             if test1[i] == test1[i-1]:
    #                 continue
    #             elif i<len(test1)-1 and test1[i] == test1[i+1]:
    #                 continue
    #             else :
    #                 test1_new.append(test1[i])
    #         else:
    #             test1_new.append(test1[i])
    #
    #     print(''.join(test1_new))
    #     n-=1
    
    
    # 连续输入 - 较麻烦
    # n = int(input('请输入n:'))
    # n1 = n
    # test = []
    # while n:
    #     test.append(list(input('请输入字符串:')))
    #     n-=1
    #
    # for j in range(n1):
    #     test_new = []
    #     for i in range(len(test[j])):
    #         if i>=2 and test[j][i-2] == test[j][i-1]:
    #             if test[j][i] == test[j][i-1]:
    #                 continue
    #             elif i<len(test[j])-1 and test[j][i] == test[j][i+1]:
    #                 continue
    #             else :
    #                 test_new.append(test[j][i])
    #         else:
    #             test_new.append(test[j][i])
    #
    #     print(''.join(test_new))
    #     n-=1
    
    
    ########### 大佬解法 ########
    
    # n = int(input())
    # while n > 0:
    #     s = input()
    #     res = []
    #     for e in s:
    #         if len(res) < 2:
    #             res.append(e)
    #             continue
    #         if len(res) >= 2:
    #             if e == res[-1] and e == res[-2]:
    #                 continue
    #         if len(res) >= 3:
    #             if e == res[-1] and res[-2] == res[-3]:
    #                 continue
    #         res.append(e)
    #     print("".join(res))
    #     n -= 1
    
    
    # 2. 万万没想到之抓捕孔连顺
    # 初步可行:
    # s = input()
    # n,d = s.split(' ')
    # n = int(n)
    # d = int(d)
    # b = input().split(' ')
    # cnt = 0
    # for i in range(n-2):
    #     for j in range(i+1,n-1):
    #         for k in range(j+1,n):
    #             if int(b[k]) - int(b[i]) <= d :
    #                 cnt+=1
    # print(cnt)
    
    # s = input()
    # n,d = s.split(' ')
    # n = int(n)
    # d = int(d)
    # b = input().split(' ')
    # cnt = 0
    # for i in range(n-2):
    #     for j in range(i+1,n-1):
    #         if int(b[j]) - int(b[i]) <= d :
    #             for k in range(j+1,n):
    #                 if int(b[k]) - int(b[i]) <= d :
    #                     cnt+=1
    # print(cnt % 99997867)
    
    
    # 自由落体
    
    # import time
    #
    # time_start=time.time()
    # while True:
    #     t = time.time() - time_start
    #     y = 0.5*9.8*t**2
    #     print('(0,%s)' %y)
    
    
  • 相关阅读:
    [色彩校正] Gamma Correction
    需要齐次坐标的原因之二 所有的变换运算(平移、旋转、缩放)都可以用矩阵乘法来搞定
    需要齐次坐标的原因之一
    数据库连接类
    简单的数组排序
    OfficePage封装代码
    新闻管理数据模板
    最新page页码生成控件代码
    新闻管理cs页面
    快速收录新域名网站
  • 原文地址:https://www.cnblogs.com/shendaw/p/13329415.html
Copyright © 2020-2023  润新知