zoukankan      html  css  js  c++  java
  • Week2-python笔记

    Week2

    1 知识补充

    1.1 三元运算

    a = 1
    b = 2
    c = 3
    d = a if a>b else c # d的值等于 如果a大于b则将a赋值给d,否则c赋值给d

    1.2 bytes类型(字节数据类型)

    Python3对文本和二进制数据作了区分。文本总是Unicode,由str类型表示,二进制数据(视频等)则由bytes类型表示。

    >>> '€20'.encode('utf-8') # 之前的字符编码方式
    b'xe2x82xac20'
    >>> b'xe2x82xac20'.decode('utf-8')
    '€20'
    >>>print(变量名.encode(encoding="utf-8")) #python3默认使用utf-8,可以直接用encode()

    2 列表

    定义:[ ] 内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素。

    特性:

    > 可存放多个值

    > 可修改指定索引位置对应的值,可变

    > 按照从左到右的顺序定义列表元素,下标从0开始顺序访问

    2.1 列表创建

    list 表示列表类型
    list1=[ ]   #空列表
    list2=[1,2,3,4]
    list3=['a','b','c']      #有元素列表
    names = ["zhouxy","panjq","lijm","caiyq"]
    print(names[0])

    输出:zhouxy

    2.2 切片

    names = ["zhouxy","panjq","lijm","caiyq"]
    print(names[0])
    print(names[1:3]) # 左闭右开
    print(names[:3]) # 如果是从头开始取,0可以忽略
    print(names[-1]) # 取最后一个值,倒数第二为-2 以次类推
    print(names[-3:-1]) # 切片从左往右数,但不包括-1最后一个值
    print(names[-3:]) # 包括最后一个值
    print(names[0::2]) # 后面的2是代表,每隔一个元素,就取一个
    print(names[::2]) # 上句效果一样

     

    2.3 追加&插入

    names = ["zhouxy","panjq","lijm","caiyq"]
    names.append("linjm") # 新增在最后
    print(names)
    
    names.insert(0,"liangjs") # 新增在指定下标位
    print(names)

    2.4 修改

    names = ["zhouxy","panjq","lijm","caiyq"]
    names[3] = "cyq"
    print(names)

    2.5 删除

    names = ["zhouxy","panjq","lijm","caiyq"]
    names.remove("caiyq") # 删除指定元素
    names.pop() # 删除列表最后一个值 
    del names[0] # 相当于names.pop(0)
    print(names)

    2.6 获取下标

    names = ["zhouxy","zhouxy","panjq","lijm","caiyq",1,2,3]
    print(names.index("zhouxy")) # 只返回找到的第一个下标

    2.7 清空列表

    names.clear() # 清空
    print(names)

    2.8 反转

    names.reverse() # 反转
    print(names)

    2.9 排序

    names = ["zhouxy","zhouxy","panjq","lijm","caiyq",'1','2','3']
    names.sort() # 排序,特殊字符、数字、大写、小写,python3里不同数据类型不能放在一起排序
    print(names)

    2.10 扩展

    names = ["zhouxy","zhouxy","panjq","lijm","caiyq",'1','2','3']
    b = ['a','b','c']
    names.extend(b) # 合并列表
    print(names)

    2.11 拷贝

    names = ["zhouxy","panjq","lijm","caiyq",["linjm","liangjs"]]
    names2 = names.copy()
    print(names,names2)
    names[0] = "周小律"
    print(names,names2)
    names[-1][1] = "梁胖"
    print(names,names2) # 浅copy只拷贝内存地址,只拷贝第一层数据,相当于names2 = copy.copy(names)或 names2 = names[:] 或 names2 = list(names)
    names2 = names # 两层都没有拷贝
    print(names,names2)

    import copy
    names = ["zhouxy","panjq","lijm","caiyq",["linjm","liangjs"]]
    names2 = copy.deepcopy(names) # 深拷贝
    names[0] = "周小律"
    names[-1][1] = "梁胖"
    print(names,names2)

    2.12 长度

    names = ["zhouxy","panjq","lijm","caiyq",["linjm","liangjs"]]
    print(len(names)) # 统计列表的长度以及列表元素的长度

    输出:5

    2.13 循环

    names = ["zhouxy","panjq","lijm","caiyq",["linjm","liangjs"]]
    for i in names: # 循环打印列表
        print(i)

    names = ["zhouxy","panjq","lijm","caiyq",["linjm","liangjs"]]
    index = 0
    while index < len(names):
        print(names[index], end=' ')  # end='' 不换行打印, <br>#' ' 有一个空格,不换行隔一个空格打印
        index += 1

    3 元组

    元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。

    3.2 创建元组 

    # 只有一个元素的话,元素后面要加逗号 ,不然不是元组类型。
    x = (1)
    print(type(x))
    y = (1,)
    print(type(y))

    它只有2个方法,一个是count,一个是index。

    4 字符串操作

    name = "ZZzzhouxy"
    
    print(name.capitalize()) # 首字母大写
    print(name.count('z')) # 统计字符串z出现次数
    print(name.casefold()) # 大写全部变小写
    print(name.center(20,'-'))
    print(name.encode()) # 将字符串编码成bytes格式
    print(name.endswith('xy')) # 判读字符串是否以xy结尾
    print(name.expandtabs(2)) # 将	转换成2个空格
    print(name.find('Z')) # 查找A,找到返回其索引, 找不到返回-1
    print(name[name.find("Z"):3]) # 字符串切片
    print(name.rfind('z')) # 找最右的值下标
    name = "my name is {name}"
    print(name.format(name="zhouxy"))

    print('1'.isdigit()) # 是否为整型
    print('a1'.isalnum()) # 是否为字母加数字
    print('a1'.isalpha()) # 是否为纯英文字符
    print('10'.isdecimal()) # 是否为十进制
    print('1_a'.isidentifier()) # 是否为合法的标识符
    print('1.0'.isnumeric()) # 是否为纯数字
    print('Zhouxy'.isupper()) # 是否都为大写
    print('My name is zhouxy'.istitle()) # 是否每个字符首字母大写
    print('My name is zhouxy'.title()) # 每个字符首字母转为大写
    print('Zhouxy'.lower()) # 大写转为小写
    print('Zhouxy'.upper()) # 小写转为大写
    print('Zhouxy'.swapcase()) # 大写转小写,小写转大写

    print('1+2+3'.split('+')) # 字符转按分隔符分成列表
    print('a
    b'.splitlines()) # 按换行符分隔
    print(' zhouxy '.strip()) # 去空格和去回车
    print(' zhouxy '.lstrip()) # 左边去空格和去回车
    print(' zhouxy '.rstrip()) # 右边去空格和去回车
    print('zhouxyzxy'.replace('z','Z',1)) # 指定替换个数
    print('zhouxy'.ljust(20,'*'))
    print('zhouxy'.rjust(20,'*'))
    print('zhouxy'.zfill(20)) # 补零
    print('+'.join(['1','2'])) # 列表转为字符串
    n = str.maketrans('xyzabc','123456') # 加密
    print(‘zhouxy’.translate(n))

    5 字典操作

    字典定义的基本形式:key:value,字典需要注意key必须是不可变类型且唯一,或者说是可hash类型,且字典dict是无序的。

    5.1 增删改查

    info = {
        'zhouxy':'A',
        'panjq':'B',
        'lijm':'C',
        'caiyq':'D'
    }
    print(info)
    print(info['zhouxy']) # 取值
    info['zhouxy'] = "周小律" # 修改
    info['linjm'] = '新增' # 不存在key值则新增
    del info['caiyq'] # 删除
    info.pop('panjq') # 删除
    print(info)
    info.popitem() # 随机删除
    print(info)
    print(info.get('liangjs')) # 推荐不存在key值查找
    print('liangjs' in info) # 是否存在,info.has_key("liangjs") in py2f.x

    5.2 其他操作

    info = {
        'zhouxy':'A',
        'panjq':'B',
        'lijm':'C',
        'caiyq':'D'
    }
    print(info.values()) # 取全部value值
    print(info.keys()) # 取全部key值
    print(info.items()) # 字典转列表
    print(info.setdefault('xyzhou','a')) # 不存在key则新增
    print(info.setdefault('zhouxy','a')) # 相同key值不修改
    
    name2 = {
        'zhouxy':'zxy',
        'liangjs':'梁胖'
    }
    print(info.update(name2)) # 不存在key则新增,相同key则更新
    
    new = dict.fromkeys([1,2,3],['1',{'name':'level'},'a']) # 初始化新字典
    print(new)
    new [1][1]['name'] = 'Name'
    print(new) # 多层修改,改则全改

    5.3 循环

    info = {
        'zhouxy':'A',
        'panjq':'B',
        'lijm':'C',
        'caiyq':'D'
    }
    for i in info:
        print(i,info[i])
    
    for k,v in info.items(): #会先把dict转成list,不推荐
        print(k,v)

    5.4 多级嵌套及操作

    #三级菜单

    #以次选择进入子菜单

    #各级可返回和退出

    # 建立一个多层字典
    chinese_catelog = {
        '广东省':{
            '广州市':{
                '越秀区',
                '荔湾区',
                '天河区',
                '番禺区',
                '白云区',
            },
            '深圳市':{
                '南山区':['长亮科技','深圳湾科技生态园'],
                '福田区':['平安银行','平安银行大厦'],
                '罗湖区':[],
                '宝安区':[],
            },
            '珠海市':{},
            '东莞市':{},
            '汕头市':{},
        },
        '江苏省':{
            '南京市',
            '苏州市',
            '扬州市',
            '南通市',
        },
    }
    exit_flag = False
    
    while exit_flag is not True:
        for i1 in chinese_catelog: # 循环打印省列表
            print(i1)
        choice1 = input('请输入所在省:')
        if choice1 in chinese_catelog: # 如果输入存在省
            while exit_flag is not True:
                for i2 in chinese_catelog[choice1]:  # 循环打印市列表
                    print(i2)
                choice2 = input('请输入所在市:')
                if choice2 in chinese_catelog[choice1]: # 如果输入存在市
                    while exit_flag is not True:
                        for i3 in chinese_catelog[choice1][choice2]: # 循环打印区列表
                             print(i3)
                        choice3 = input('请输入所在区:')
                        if choice3 in chinese_catelog[choice1][choice2]: # 如果输入存在区
                            while exit_flag is not True:
                                for i4 in chinese_catelog[choice1][choice2][choice3]:
                                    print(i4)
                                choice4 = input('已选择完成,请按b返回')
                                if choice4 == 'b':
                                    break
                                elif choice4 == 'q':
                                    exit_flag = True
                        if choice3 == 'b':
                            break
                        elif choice3 =='q':
                            exit_flag = True
                if choice2 == 'b':
                    break
                if choice2 == 'q':
                    exit_flag = True

    6 homework

    #启动程序后,让用户输入工资,然后打印商品列表
    #允许用户根据商品编号购买商品
    #用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
    #可随时退出,退出时,打印已购买商品和余额
    
    shopping_list = [
        ('Iphone',5000),
        ('Macbook Pro',128000),
        ('iWatch',2400),
        ('Ipad',7000)
    ]
    _shopping_list = []
    salary = input('请输入余额:')
    if salary.isdigit():
        salary = int(salary)
        new_salary = salary
        for index,item in enumerate(shopping_list):
            print(index,item)
        while True:
            product_code = input('请输入购买的商品编号:')
            if product_code.isdigit():
                product_code= int(product_code)
                if product_code < len(shopping_list) and product_code >= 0:
                    if new_salary > shopping_list[product_code][1]:
                        _shopping_list.append(shopping_list[product_code])
                        new_salary = new_salary-shopping_list[product_code][1]
                        print('33[32;1m%s33[0m已加入购物车,还剩下余额33[31;1m%s33[0m' %(shopping_list[product_code], new_salary))
                    else:
                        print('余额已不足,还剩余额%s' %new_salary)
                else:
                    print('商品编号不存在')
            elif product_code =='q':
                print('已购买以下商品'.center(50,'-'))
                print(_shopping_list)
                exit()
    View Code
  • 相关阅读:
    【VS开发】【智能语音处理】DTW算法(语音识别)
    【VS开发】【智能语音处理】语音信号处理之(四)梅尔频率倒谱系数(MFCC)
    【VS开发】【智能语音处理】语音信号处理之(四)梅尔频率倒谱系数(MFCC)
    【VS开发】如何移植对话框?
    【VS开发】如何移植对话框?
    【VS开发】模态对话框和非模态对话框
    【VS开发】模态对话框和非模态对话框
    【VS开发】【智能语音处理】Windows下麦克风语音采集
    【VS开发】【智能语音处理】Windows下麦克风语音采集
    【VS开发】【智能语音处理】VS中声音的采集实现
  • 原文地址:https://www.cnblogs.com/cirr-zhou/p/8465661.html
Copyright © 2011-2022 走看看