字典
1.常用的数据结构中:列表、元组、字符串属于序列,而字典和集合属于非序列,元素无序,没有index索引。字典是映射(键值对)
2.所有key值不能重复,必须唯一,且一般使用字符串或数字。value值可以是任意类型
dict1={
'名字':'姚明',
'身高':226,
'体重':180
}
#两层字典
dict2={
'姚明':{
'身高':226,
'体重':180
},
'牢大':{
'身高':202,
'体重':150
}
}
print(dict1['名字'])
print(dict2['牢大']['身高'])
print(dict1)
#修改字典元素
dict1['身高']=999
print(dict1)
#增加字典元素
dict1['朋友']='冰红茶24'
print(dict1)
#删除字典元素
dict1.pop('体重')
print(dict1)
#遍历字典元素-直接遍历
for key in dict1:
print(f'key:{key}->value:{dict1[key]}')
#遍历字典元素-items()
items=dict1.items()
print(items)
for item in items:
print(item)
#输出字典长度
print(len(dict1))
print(type(dict1)) #返回变量数据类型
#字典推导式
import random
dict1={i:random.randint(0,101) for i in range(1,6)}
print(dict1)
集合
Set集合也是一种非序列可变数据结构,没有index索引,元素无序。可以是任何数据类型,但是不能重复
#使用{}创建集合
set1={'梅西','罗纳尔多','罗纳尔迪尼奥'}
print(set1)
#使用set()函数创建
set1=set([1,2,3,4,5])
set2=set(('梅西','罗纳尔多','罗纳尔迪尼奥'))
set3=set({'名字':'牢大','喜好':'冰红茶','号码':'24'})
print(set1)
print(set2)
print(set3)
'''
注意:
将其他数据结构转化为set,起到去重作用
'''
set1=set([1,2,3,3,4,5,6])
print(set1) #{1, 2, 3}
#集合的增删查,集合不能修改
set1.add(7)
set1.remove(6)
set1.clear() #清空集合
#集合的交集、并集、差集
set1={1,2,3,4}
set2={4,5,6,7}
print(set1&set2)
print(set1|set2)
print(set1-set2)
练习
#1.
address_dict={
'孙悟空':'13800000001',
'贝吉塔':'13800000002',
'比鲁斯':'13800000003'
}
choice=input('请选择通讯录功能(1.添加联系人;2.删除联系人;3.查找联系人):')
names=address_dict.keys()
if choice=='1':
name=input('请输入联系人姓名:')
tel=input('请输入联系人电话:')
if name not in names:
address_dict[name]=tel
else:
print(f'联系人已存在:{name}')
if choice=='2':
name=input('请输入联系人姓名:')
tel=input('请输入联系人电话:')
if name in names:
address_dict.pop(name)
else:
print(f'联系人不存在:{name}')
if choice=='3':
name=input('请输入联系人姓名:')
if name in names:
print(f'联系人姓名:{name} 电话:{address_dict[name]}')
else:
print(f'您输入的联系人不存在:{name}')
else:
print(f'无效选项:{choice}')
#2.
names=set()
while str!='q':
str=input('请输入客户姓名:')
if str=='q':
break
else:
names.add(str)
print(f'客户单为:{names}')
函数
def add(a,b):
return a+b
print(add(1,2))
#可变参数-*parameter
def func(*foods):
print('窝爱吃:',end='')
for food in foods:
print(food,end=' ')
print()
func('凉面')
func('凉面', '榆次炸鸡', '老乡鸡')
#传递元组
foods=('凉面','榆次炸鸡','老乡鸡')
func(*foods)
#可变参数-**parameter-接收一个字典
def func1(**address):
for key,value in address.items():
print(f'姓名:{key} 电话:{value}')
func1(科比冰红茶='132000000',goat梅西='2546326')
address={'科比冰红茶':'132000000','goat梅西':'2546326'}
func1(**address)
#global关键字
def func2():
global num #将局部变量定义为全局变量
num=66
print(num)
func2()
print(num)
'''lambda表达式'''
#函数
def func3(r):
area=3.14*r*r
return area
print(func3(3))
#lambda表达式
area=lambda r:3.14*r*r
print(area(3))
练习
list=[]
for i in range(1,101):
if str(i).count('6')>=1:
list.append(i)
print(list)
递归:求1!+2!+3!+…+n!
#2.递归:求1!+2!+3!+...+n!
n=int(input()) #input返回str类型,记得转成int
def jiecheng(n):
if(n<=1):
return 1
return n*jiecheng(n-1)
sum=0
for i in range(1,n+1):
sum+=jiecheng(i)
print(sum)
文件和目录的操作
'''
文件操作
'''
file1=open('1.txt',mode='r',encoding='utf8')
# file1=open(r'D:\pyworkspace\test\test1\1.txt',mode='r',encoding='utf8')
file1.close()
#with-open()更安全,with-open()语句执行完毕后,file文件对象会自动关闭
#读取文件
def func1():
file1 = open('1.txt', mode='r', encoding='utf8')
# str1=file1.read() #读取整个文件
# str1 = file1.read(5) # 读取前5个字符
# str2 = file1.read(5)
# str1=file1.readline() #一次读一行
# str2 = file1.readline()
list1=file1.readlines() #读取所有行放入列表
# print(str1)
# print(str2)
print(list1)
file1.close()
func1()
#写入文件
def func2():
file2 = open('2.txt', mode='w', encoding='utf8')
# str2='向新的一年\n向二手玫瑰致敬\n2024.5.30'
# file2.write(str2) #当文件已存在会覆盖掉原内容,当文件不存在会创建新的文件
#将字符串的列表写入文件
list2=['向新的一年\n','向二手玫瑰致敬\n','2024.5.30']
file2.writelines(list2)
file2.close()
func2()
'''
目录操作
'''
import os
#获取绝对路径
print(os.path.abspath('1.txt')) #D:\pyworkspace\test\test1\1.txt
#拼接多个路径
'''这里不使用字符串拼接的原因:join()可以正确处理不同操作系统的分隔符'''
path=os.path.join(r'D:\pyworkspace\test\test1',r'1.txt')
print(path)
#判断路径是否存在
print(os.path.exists(path))
#创建目录
def func3():
path=r'D:\pyworkspace\test\歌手2024'
if os.path.exists(path)!=True:
# os.mkdir(path,mode=0o777) #创建一级目录
os.makedirs(path,mode=0o777) #创建多级目录
# func3()
#删除目录
def func4():
path=r'D:\pyworkspace\test\歌手2024'
if os.path.exists(path) == True:
os.rmdir(path)
# func4()
#遍历目录
def func5():
path = r'D:\pyworkspace\test\test1'
lterator1=os.walk(path)
for tuple in lterator1:
print(tuple)
func5()
'''
高级文件操作
'''
#删除文件
def func6():
os.remove('test.txt')
# func6()
#重命名文件或目录
def func7():
# os.rename('cc.txt','xx.txt')
os.rename('cc','xx')
# func7()
#获取文件信息
from datetime import date
def func8():
fileinfo=os.stat('1.txt')
print(f'文件大小:{fileinfo.st_size}bytes')
print(f'文件创建时间:{fileinfo.st_ctime}')
print(date.fromtimestamp(fileinfo.st_ctime))
func8()
练习
def func9():
#1.读取数据
# with-open()更安全,with-open()语句执行完毕后,file文件对象会自动关闭
with open('score1.txt',mode='r',encoding='utf8') as file1:
list1=file1.readlines()
print(list1)
#2.处理数据
#2.1分割列表里的字符串
list2=[]
for line in list1:
line=line.split() #根据空格分割为列表
# print(line)
sum=int(line[1])+int(line[2])+int(line[3])
line.append(str(sum))
print(line)
line=' '.join(line)+'\n'
list2.append(line)
print(list2)
#3.写入数据
with open('score2.txt',mode='w',encoding='utf8') as file1:
file1.writelines(list2)
func9()
面向对象编程
面向对象三大原则:
封装、继承、多态
类中的方法类型:
1.实例方法
2.类方法
3.静态方法
实际中,2 3用的少,只在一些特殊的场景中(例如工厂模式中)用到。
'''
面向对象和封装
'''
#定义类
class Dog():
#属性
classname='doggogog'
#构造方法
def __init__(self,name,color):
self.name=name
self.color=color
def eat(self):
print(f'{self.name}正在比利.肯粑')
def bark(self):
print('狗叫')
#创建与使用对象
dagou=Dog('大狗','冰红茶色')
ergou=Dog('二狗','青梅绿茶色')
print(dagou.classname)
print(ergou.eat())
'''
继承:
继承Dog类所有非私有属性和方法,并增加了一个destroy()方法
'''
class HuskyDog(Dog):
def destroy(self):
print('拆家')
'''
多态
'''
class ChinaDog(Dog):
#覆盖(重写/override)父类同名方法
def eat(self):
print('吃肉')
class LondonDog(Dog):
def eat(self):
print('威士忌')
模块
import time
print(time.ctime())
#格式化输出时间
print(time.strftime('%Y-%m-%d:%H-%M-%S'))
import random
print(random.randint(1,10)) #返回1-10之间的随机整数
list=[1,2,3,4,5]
print(random.choice(list)) #返回序列中的随机元素
random.shuffle(list) #将序列随机打乱位置
print(list)
import math
print(math.ceil(3.14)) #向上取整
print(math.floor(3.14)) #向下取整
print(math.fabs(-3.14))
print(math.factorial(3)) #阶乘
print(math.pi)
数据库操作
- 连接数据库
- 获取游标对象
- 执行sql语句
- 获取查询结果集
- 提交事务,关闭游标和连接
错误和异常
错误会被pycharm编译器自动检测出来,有错误会导致程序无法运行。
异常在不运行的情况下很难被发现,异常会中断程序的运行,但可以在运行的过程中捕捉异常。
'''
异常的处理
'''
def foo1():
for i in range(-2,3):
try:
print(50 / i)
except Exception as e:
print('除零异常',e)
else:
print('没有异常')
finally:
print('不管有没有异常都要执行')
print('------------')
foo1()