目录
6、查询字典内key值,使用 not in 和 in 与if搭配
一、列表 list
1、访问特定元素
# 访问特定元素
content = [1,2,'ac','ok']
print(content)
print(content[2].title())
print(content[-1])
2、修改元素
# 修改元素
content = [1,2,'ac','ok']
content[2] = "mysql"
print(content)
3、添加元素
# 最后添加元素
content = [1,2,'ac','ok']
content.append("2222")
print(content)
4、给一个空列表添加元素
#为一个空列表 添加元素
mylist = []
mylist.append(1)
mylist.append(2)
print(mylist)
5、指定处插入元素,其它元素依次向右移动
#指定处插入元素,其它元素依次向后
content = [1,2,'ac','ok']
content.insert(2,"index")
print(content)
6、pop弹出指定元素
(1)弹出栈顶元素
#获取栈顶元素
list1 = [0,1,2,3,4]
list2 = list1.pop()
print(list1)
print(list2)
(2)弹出指定处元素
#获取指定索引处元素
list1 = [0,1,2,3,4]
list2 = list1.pop(2)
print(list1)
print(list2)
7、删除指定处元素
#删除指定元素
list1 = [0,1,2,3,4]
list1.remove(3)
print(list1)
8、将列表元素颠倒
#将列表颠倒
list = [2,4,5,1]
list.reverse()
print(list)
9、列表长度
#列表长度
list = [2,4,5,1]
print(len(list))
10、求列表最大、最小、聚合值
#求列表最大、最小、聚合值
list = [1,4,7]
print(max(list))
print(min(list))
print(sum(list))
11、列表排序
(1)永久更改列表数据升序
# 按照升序排序 ,更改表数据,回不来
list = [2,4,5,1]
list.sort()
print(list)
(2)永久更改列表数据降序
#倒序 true和false 第一个字母必须大写
list1 =[2,3,9,5]
list1.sort(reverse=True)
print(list1)
(3)暂时更改表顺序升序
# 按照升序排序 ,更改表数据,临时改变
list = [2,4,5,1]
sorted(list)
print(list)
print(sorted(list))
12、for 和 list 组合
list = [1,2,3,4,5]
# python 中使用缩进表示结构与信息 ,同一个语句块使用相同的缩进
for i in list:
print(i)
print("++++++")
print(i)
13、range 和 list 组合
(1)使用range 给一个空列表赋值
第一种写法
#所谓列表,就是一个序列,其中的元素有序、可变、不限类型
mylist = []
for num in range(1,5):
mylist.append(num)
print(mylist)
第二种写法
#使用 list和 range函数 生成数值列表
nums = list(range(1,5))
print(nums)
(2)range 步长使用
#第一个参数表示起始值 第二个表示终止值 第三个表示步长
nums2 =list(range(1,6,2))
print(nums2)
例子
#打印一个列表的平方
numbers =[]
for nums3 in range(1,5):
numbers.append(nums3**2)
print(numbers)
(3)列表解析
#列表解析
list =[ i for i in range(1,5)]
list1 = [ i**2 for i in range(1,5)]
print(list)
print(list1)
(4)切片
#切片
list = [i for i in range(1,5)]
print(list)
print(list[1:3])
print(list[1:])
print(list[:1])
print(list[-2:])
(5)指定切片范围遍历
#遍历切片
list = [i for i in range(0,5)]
print(list)
for nums in list[1:3]:
print(nums)
(6)切片赋值列表
#快速复制列表或其中个别元素
list = [i for i in range(0,5)]
list1 = list[1:]
list2 = list
print(list1)
print(list2)
二、元组 tuple
1、定义
#元组是不可修改的列表
2、形式
#元组
mytuple = (1,2,3)
print(mytuple)
3、元组注意点
#一个元素的元组,要加 逗号 来标识元组
mytuple2 =(1,)
print(mytuple2)
#通过分号区分在一行的语句
mylist = [1,2]; mylist[1] =10
print(mylist)
结果:
D:\pythontest\python\venv\Scripts\python.exe D:/pythontest/python/com/peizk/demo_tuple.py
(1,)
[1, 10]
三、字典 dict
1、字典一般用法(键值对)
# 字典
mydict = {"a":"1","b":"2","c":[1,2,3]}
print(mydict["a"])
print(mydict["c"][1])
2、添加键值对
#添加键值对
mydict ={}
mydict["a"] = 1
mydict["b"] = 1
mydict["c"] = 1
print(mydict)
3、删除键值对
mydict ={}
mydict["a"] = 1
mydict["b"] = 1
mydict["c"] = 1
print(mydict)
#删除键值对
del mydict["a"]
print(mydict)
4、遍历字典返回k v键值对值,使用items()
# 遍历字典返回k v键值对值,使用items
mydict ={"zhangsan":"a"
,"lisi":"b"
,"wangwu":"c"
,"zhaoliu":"d"
,"duqi":"d"}
print(mydict)
for k,v in mydict.items():
print(k+"_"+v)
5、返回字典中所有 key,使用 keys()
mydict ={"zhangsan":"a"
,"lisi":"b"
,"wangwu":"c"
,"zhaoliu":"d"
,"duqi":"d"}
# keys 返回字典中所有的key
for k in mydict.keys():
print(k+"最喜欢"+mydict[k])
#默认什么不写 就是key
for name in mydict:
print(name)
6、查询字典内key值,使用 not in 和 in 与if搭配
mydict ={"zhangsan":"a"
,"lisi":"b"
,"wangwu":"c"
,"zhaoliu":"d"
,"duqi":"d"}
#查询某个名字是否在字典中
if "zhangsan" not in mydict.keys():
print("zhansgan is not in mydict")
if "lisi" in mydict.keys():
print("lisi in mydict")
7、查询字典key排序结果
mydict ={"zhangsan":"a"
,"lisi":"b"
,"wangwu":"c"
,"zhaoliu":"d"
,"duqi":"d"}
#按顺序查名字
#使用sorted函数首先对key集合进行排序
for name in sorted(mydict.keys()):
print(name.upper())
8、查询字典中values值使用values()
mydict ={"zhangsan":"a"
,"lisi":"b"
,"wangwu":"c"
,"zhaoliu":"d"
,"duqi":"d"}
#只查 values
for values in mydict.values():
print(values)
9、查询字典中values不重复的值,使用set集合
mydict ={"zhangsan":"a"
,"lisi":"b"
,"wangwu":"c"
,"zhaoliu":"d"
,"duqi":"d"}
#使用set进行去重,set集合和列表的区别在于set集合不可以重复
for values in set(mydict.values()):
print(values)
10、将字典存储在列表打印出
user1 ={"name":"zhansgan"
,"age":17
,"sex":"m"
}
user2 ={"name":"lisi"
,"age":18
,"sex":"wm"
}
user3 ={"name":"wangwu"
,"age":17
,"sex":"m"
}
list = [user1,user2,user3]
for i in list:
for k,v in i.items():
#如果k =age ,就说明 v是 int类型 需要转换为 str类型 再打印
if k == "age":
v = str(v)
#end = 表示 将默认的\n 换为 |||
print(k+"______"+v,end="|||")
#用于换行
print()
11、按照格式打印字典小例子
like_lesson = {
"zhangsan":["shuxue","yuwen"]
,"lisi":["shuxue"]
,"wangwu":["shuxue","yingyu"]
}
for name,lesson in like_lesson.items():
print(name+"like lesson :",end ="")
for less in lesson:
print(less+";",end = "")
print()
四、if 和 while
1、if
(1)基本格式
num1 =3
if num1>3:
print("大于3")
else:
print("小于3")
(2)多个条件
num2 =3
if num2 =="1":
print("周一")
elif num2 =="2":
print("周二")
else:
print("周日")
(3)判断空列表
list = []
if list:
for val in list:
print(val)
else:
print("空")
2、while
(1)基本格式
# 基本
value = 5
while value>0:
print(value)
value -= 1
(2)简单用户输入的循环小例子
#一个简单的用户循环判断
while True:
mystr = input("请输入y|n")
if mystr =="y":
print("正在继续")
continue
elif mystr == "n":
break
print("正在继续")
(3)利用字典的循环输入小例子
#小例子2
responses ={}
goon = True
while goon:
name = input("your name:")
respons = input("xingqu")
responses[name] = respons
answer = input("y/n")
goon =answer == 'y'
for k,v in responses.items():
print(k+"---"+v)
五、函数块 def
1、基本形式
""" def 用来定义函数 """
def hello():
print("Helo peizk")
hello()
2、传参函数
def hello2(name):
print("hello "+str(name))
hello2("zhansgan")
hello2(123)
3、关键字传参
"""关键字传参"""
def pet_describe(pet_name="填写宠物name",pet_type="填写宠物type"):
print("这是一个叫"+pet_name+"的"+pet_type)
pet_describe(pet_name="aaa",pet_type="bbb")
#默认值
pet_describe()
六、文件操作 file
1、打开文件
"""第一个r 代表转义文件路径 第二个r 代表只读模式 第三个 代表字符集"""
file = open(r"C:\Users\86131\Desktop\账号密码.txt","r",encoding="UTF-8")
for line in file.readlines():
print(line,end="")
"""关闭文件流"""
file.close()
2、写文件内容
"""文件以写模式打开,以utf-8编码进行处理"""
file = open (r"C:\Users\86131\Desktop\test.py","w",encoding="UTF-8")
for i in range(10):
"""使用write方法,向打开的文件写内容"""
file.write(str(i))
file.close()
3、一个例子 查看某一目录下的目录及文件
import os
def print_path(mypath):
"""获取目录下的所有文件或文件夹名称"""
list = os.listdir(mypath)
for list in list:
file_path = mypath + "\\" + list
if os.path.isdir(file_path):
print(file_path + "is 目录")
"""递归获取"""
print_path(file_path)
else:
print(file_path + "is 文件")
mypath = r"D:\javatest"
"""判断是否是一个文件"""
print(os.path.isdir(mypath))
print("is 目录")
"""获取目录下的所有文件或文件夹名称"""
print_path(mypath)
七、对象
1、类的实例化
class myclass:
pass
#类的实例化
myclass1 =myclass()
#打印对象的内存地址,id返回具体数值
print(myclass1)
print(id(myclass1))
2、方法
class User:
name ="zhangsan"
age = 26
"""默认调用"""
def __init__(self):
"""不加self 就是局部变量"""
self.name ="lisi"
self.age = 29
"""可使用类时直接指定"""
def __init__(self,name,age):
self.name = name
self.age = age
def method(self):
return "hello "
user =User("wangwu",18)
print(user.name+"----"+str(user.age))
print(user.method())
""" 类方法需要加 cls 静态方法不用 都可以被直接调用"""
class User:
@classmethod
def say_hello(cls):
print("类方法")
print(cls.__class__)
@staticmethod
def say_my_hello():
print("静态方法")
user = User()
user.say_hello()
user.say_my_hello()
"""在类的内部定义方法 必须包含参数self 代表类的实例"""
class User:
"""self 代表对象本身 ,任何都可以 一般习惯用self"""
def say_hello(self):
print(self)
print(self.__class__)
user = User()
print(user.say_hello())
# 这种写法不可以
# print(User.say_hello())
3、继承
(1)单继承例子
class Person:
name = ""
age =0
#有两个下划线,私有属性,外部无法访问,只能在类内部访问(通过类内部方法访问)
__weight = 0
#初始化
def __init__(self,name,age,weight):
self.name =name
self.age = age
self.__weight =weight
def say_hello(self):
print(self.name+"---"+str(self.age)+"------"+str(self.__weight),end="")
# Progra 类继承 Person 类
class Progra(Person):
language = ""
def __init__(self,name,age,weight,language):
self.language =language
# self.name = name
# self.age =age
#调用父类的构造器
Person.__init__(self,name,age,weight)
#重写父类方法
def say_hello(self):
Person.say_hello(self)
print("----"+self.language)
progra = Progra("zhangsan","25","175","java")
progra.say_hello()
(2)多继承例子
"""若父类中有相同的方法名,并且在子类中使用时未指定,则从左到右找第一个"""
class A:
def code(self):
print("可以写代码")
def cook(self):
print("可以写做饭代码")
class B:
def play(self):
print("我会打游戏")
def cook(self):
print("我会做饭")
class C(A,B):
pass
c = C()
c.play()
c.code()
c.cook()
4、方法重写
class Fu:
name = ""
age =""
def __init__(self):
self.name ="张三"
self.age =18
def say_hello(self):
print(self.name+"----"+str(self.age))
class Zi(Fu):
def __init__(self):
"""相当于重写传空值"""
pass
def say_hello(self):
print("aaaaaaaa")
"""重写方法"""
super(Zi,self).say_hello()
zi = Zi()
zi.say_hello()
5、类的专有方法
class User:
"""new 创建对象,如果该方法返回为None,则init方法不会被调用"""
def __new__(cls, *args, **kwargs):
return super().__new__(cls)
# return None
"""构造方法:对对象属性值进行初始化"""
def __init__(self):
self.name ="张三"
self.age = 18
def say_hello(self):
print(self.name+str(self.age))
"""在销毁对象是被调用"""
def __del__(self):
print("析构方法被调用了")
user =User()
user.say_hello()
6、命名空间
(1)内置名称
Python 语言内置的名称,比如函数abs,char和异常名称BaseException,Exception等
(2)全局名称
模块中定义的名称,记录了,模块的变量,包括函数,类等
(3)局部名称
函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量,(类中定义的也是)
(4)查找顺序
局部 --> 全局 --> 内置
如果都找不到,就会引发一个 NameError异常
八、设计模式
1、单例模式
单例模式设计如下
"""单例模式"""
class Play():
#记录第一个被创建对象的引用
instance = None
def __new__(cls, *args, **kwargs):
#判断类属性是否为空
if cls.instance is None:
#调用父类的方法,为第一个对象分配空间
cls.instance = super().__new__(cls)
#返回类属性保存的对象引用
return cls.instance
play1 =Play()
play2 =Play()
print(play1)
print(play2)
print(id(play1))
print(id(play2))
2、补充:初始化动作只执行一次
"""单例模式"""
class Play():
#记录第一个被创建对象的引用
instance = None
#记录是否执行过初始化动作
init_flag = False
def __new__(cls, *args, **kwargs):
#判断类属性是否为空
if cls.instance is None:
#调用父类的方法,为第一个对象分配空间
cls.instance = super().__new__(cls)
#返回类属性保存的对象引用
return cls.instance
def __init__(self):
#1判断是否执行过初始化
if self.init_flag :
return
#2没有则执行初始化,并更改flag值
print("初始化aaa")
self.init_flag = True
play1 =Play()
play2 =Play()
print(play1)
print(play2)
print(id(play1))
print(id(play2))
九、错误和异常
1、对错误进行处理
try:
#不能确定执行的错误代码
numbers = int(input("input"))
except:
#对于错误的处理代码
print("出错啦")
print("--"*50)
2、预判错误进行处理
try:
#不能确定执行的错误代码
numbers = int(input("input"))
num = 10/numbers
except ValueError:
#对于错误的处理代码
print("请输入数字")
except ZeroDivisionError:
print("除数不能为0")
3、处理未知错误
try:
#不能确定执行的错误代码
numbers = int(input("input"))
num = 10/numbers
except Exception as result:
print("发生错误,为 %s" %result)
4、异常捕获完整语法
try:
#不能确定执行的错误代码
numbers = int(input("input"))
num = 10/numbers
except ZeroDivisionError:
print("除数不能为0")
except Exception as result:
print("发生错误,为 %s" %result)
else:
print("try 代码未出错才会执行")
finally:
print("一定会执行的代码")
5、利用异常的传递性,在主程序捕获异常
def demo1():
numbers = int(input("input"))
num = 10/numbers
def demo2():
demo1()
#利用异常的传递性,在主程序捕获异常
try:
demo2()
except Exception as result:
print(result)
6、一个用户密码例子,主动抛出异常
"""
需求:定义一个 input_passwd 函数,提示用户输入密码
如果用户输入的密码长度小于 8 就抛出异常
如果用户输入的密码长度 >= 8 就返回输入的密码
知识点:
1、可以使用 Exception 创建对象
2、可以使用 raise 抛出异常对象
"""
def input_passwd():
#1提示用户输入密码
passwd = input("请输入密码:")
#2判断密码长度,若 >= 8 ,返回密码
if len(passwd) >= 8:
return passwd
#3若密码长度 < 8 ,抛出异常
print("主动抛出异常")
#>1创建异常对象
ex = Exception("密码长度不够")
#>2主动抛出异常
raise ex
#主程序 捕获异常
try:
passwd=input_passwd()
print(passwd)
except Exception as result:
print(result)
十、操作mysql数据库
1、创建数据库
#导入包
from pymysql import *
#建立到数据库的连接
conn =connect(host="localhost",user="root",passwd="123456")
#获取游标
mycuor = conn.cursor()
#执行语句
rownum = mycuor.execute("create database pytest")
print(rownum)
#关闭游标
mycuor.close()
#关闭连接
conn.close()
2、创建表
#导入包
from pymysql import *
#建立到数据库的连接
conn =connect(host="localhost",user="root",passwd="123456",database="pytest")
#获取游标
mycuor = conn.cursor()
#执行语句 双引号只能写一行,三引号可以多行
rownum = mycuor.execute("""
CREATE TABLE `ctrip_hotel_order` (
`orderid` int DEFAULT NULL,
`hotel_id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
""")
print(rownum)
#关闭游标
mycuor.close()
#关闭连接
conn.close()
3、新增数据
#导入包
from pymysql import *
#建立到数据库的连接
conn =connect(host="localhost",user="root",passwd="123456",database="pytest")
#获取游标
mycuor = conn.cursor()
#开启事务
conn.begin()
try:
#执行语句 双引号只能写一行,三引号可以多行,注意多行的插入格式!!!
rownum = mycuor.execute("""
insert into ctrip_hotel_order values(1,1),(100,100)
""")
#打印受影响行数
print(rownum)
#提交事务
conn.commit()
#若出现异常撤销
except Exception as result:
print("出错了 %s" %result)
conn.rollback()
finally:
#关闭游标
mycuor.close()
#关闭连接
conn.close()
4、查询
#导入包
from pymysql import *
#建立到数据库的连接
conn =connect(host="localhost",user="root",passwd="123456",database="pytest")
#获取游标
mycuor = conn.cursor()
try:
#执行语句 双引号只能写一行,三引号可以多行
rownum = mycuor.execute("""
select * from ctrip_hotel_order where orderid =%s and hotel_id =%s
""",(2,2))
"""传入值必须是元组"""
#打印受影响行数
print(rownum)
#输出所有结果 用循环
result = mycuor.fetchall()
for result in result:
print(result)
#输出特定字段用index
print(result[1])
#若出现异常撤销
except Exception as result:
print("出错了 %s" %result)
finally:
#关闭游标
mycuor.close()
#关闭连接
conn.close()