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'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.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)) # 将\t转换成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\nb'.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('\033[32;1m%s\033[0m已加入购物车,还剩下余额\033[31;1m%s\033[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

 

转载于:https://www.cnblogs.com/cirr-zhou/p/8465661.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值