Python3基础 1.常量和变量
2.Python语言算术运算符
运算符
描述
例子
**
指数,执行对操作数的幂计算
a**b = 10^20(10的20次方)
//
整除,其结果是将商的小数点后的数舍去
9//2 = 4,而9.0//2.0 = 4.0
3.序列数据结构
Python列表操作符
Python表达式
描述
结果
[1,2,3] + [4,5,6]
组合
[1,2,3,4,5,6]
[‘Hi!’] * 4
重复
[‘Hi!’,’Hi!’,’Hi!’,’Hi!’]
4.元组 Python的元组(tuple)和列表类似,不同之处在于==元组==的元素==不能修改==,元组使用圆括号(),列表使用方括号[],元组的元素类型也可以不相同。
元组与列表的区别
列表是==动态==数组,它们==可变==且可以重设长度(改变其内部元素的个数)。
元组是==静态==数组,它们==不可变==,且其内部数据一旦创建便无法改变。
元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。
5.字典
字典的每个==键/值==对里面键和值用==冒号==分隔,键/值对==之间用逗号==分隔,整个字典包括在==花括号==中
例如:
1 d = {key1 : value1 , key2 : value2}
特性
字典值可以是任何Python对象,如字符串、数字、元组等。
不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会覆盖前面的值。
典方法和内置函数
函数
函数描述
dict1.get(key , default = None)
返回指定键的值,如果值不在字典中则返回default值
6.集合 集合(set)是一个==无序不重复==元素的序列。集合基本功能是进行==成员关系测试==和==删除重复元素==。
字典可以使用花括号{}或者set()函数创建集合。注意,创建一个==空集合必须用set()==而不是{},因为{}用来创建一个空字典。
7.Python控制语句 7.1.分支结构
单分支结构
二分支结构
1 2 3 4 if <条件>: <语句块1 > else : <语句块2 >
多分支结构
1 2 3 4 5 6 7 if <条件1 > : <语句块1 > elif <条件2 > : <语句块2 > ...... else : <语句块N>
注意:
该语句可以利用一系列条件表达式进行检查,并在某个表达式为真的情况下执行相应的代码。
虽然该语句的备选动作较多,但是==有且只有一组==动作被执行。
最后面的else语句没有进行条件判断,它实际处理的是跟前面所有条件都不匹配的情况下的情况,所以else语句==必须放在最后==。
7.2.循环结构
while语句
当判断条件1
为true
时执行循环语句。若此时判断条件2
为true
,执行break
跳出while
循环,若判断条件2
一直为false
,则执行while
循环,一直到判断条件1
为false
。
例如:
1 2 3 4 5 6 count = 0 while (count <= 10 ): print ("现在计数为:" ,count) count += 1 if (count \> 5 ): break
for语句&continue
可以遍历任何一个序列的项目,比如一个列表、元祖、或者一个字符串
当遍历序列时,如果判断语句1
为真,则执行continue
语句,跳出当前循环,直接进入下一次循环。
例如:
1 2 3 4 for iteration\_var in sequence: 循环语句 if 判断语句1 : continue
range()函数
例如,range(0,5)或range(5)生成的序列是从0开始到小于5的整数,不包括5==(左闭右开)==,实例如下:
1 2 3 4 5 list (range (5 ))--- [0 ,1 ,2 ,3 ,4 ]
8.求最大数和最小数 1 2 print (min (list )) print (max (list ))
9.Python函数与模块 9.1.函数的优点
代码重用
保持一致性,易维护
可扩展性强
9.2.Lambda表达式
语法:
1 lambda [arg1 [,arg2,.....argn]]:expression
冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式(只能为一个)。其实lambda返回值是一个函数的地址,也就是函数对象。
注意:
Python中函数是可以返回多个值的,如果返回多个值,会将多个值放在一个元组或者其他类型的集合中来返回。
1 2 3 4 5 6 7 8 9 def function (): x = 2 y = [3 ,4 ] return (x,y) print (function)--- (2 ,[3 ,4 ])
**若无 return ,将返回 None **
10.函数参数 10.1.函数形参和实参的区别 括号里面的变量称为形参,调用函数提供的值或者变量称为实参。
例如:
1 2 3 4 5 6 7 def add (a,b ): return a+b add(1 ,2 ) x = 2 y = 3 add(x,y)
10.2.函数参数的类型
默认参数
在定义函数时给形参赋予一个默认值,当调用函数时,如果没有给该参数赋新值,则会使用这个默认值。如果给参数赋予了新值,则会使用新值。
例如:
1 2 3 4 5 def info (name = 'Mark' , age = 22 ): print ('%s今年%s岁' % (name , age)) info() info('Lily' , 24 )
关键字参数
关键字参数是以键值对的形式定义和调用的,清除了参数的顺序要求,在调用的时候不需要考虑参数的位置。
例如:
1 2 3 4 5 def info (name , age ): print ('%s今年%s岁' % (name , age)) info(name = 'Ken' , age = 23 )
任意个数参数(可变参数)
可变参数分为可变位置参数和可变关键字参数。
可变==位置==参数使用args,把一个或多个参数封装成一个元组,然后在元组里面进行迭代。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 def func (*args ): print (type (args)) for i in args: print (i) func(1 ,20 ,35 ) --- 1 20 35
可变==关键字==参数使用**kwargs,把参数构成一个key-value键值对组成的字典。
例如:
1 2 3 4 5 6 7 8 9 10 11 def func (**kwargs ): print (type (kwargs)) for key , value in kwargs.items(): print ('key = {} , value = {}' .format (key , value)) func(name = 'Summer' , age = 20 ) --- key = name , value = Summer key = age , value = 20
11.变量的作用域 变量起作用的范围称为变量的作用域,一个变量在函数外部定义和函数内部定义,其作用域是不同的。
局部变量
在函数内部定义的变量,作用域也仅限于函数内部,出了函数便不能使用。
全局变量
和局部变量不同,全局变量的默认作用域是整个程序,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。
注意:
如果一个局部变量和一个全局变量重名,则局部变量会“屏蔽”全局变量,也就是局部变量起作用。
12.字符串函数
函数
描述
string.lstrip()
截掉string左边的空格
string.rstrip()
删除string字符串末尾的空格
string.strip()
删除string字符串首尾全部空格
13.文件的访问
值
描述
“r”
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
“w”
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
“a”
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
** 读取文本文件**
read() 每次读取==整个文件==,它通常将读取到底文件内容放到一个==字符串变量==中,也就是说 read() 生成文件内容是一个==字符串类型==。
readline()每只读取文件的==一行==,通常也是读取到的一行内容放到一个==字符串变量==中,返回==str类型==。
readlines()每次按行读取==整个文件==内容,将读取到的内容放到一个==列表==中,返回==list类型==。
写入文本文件
write()方法 write()方法将==字符串参数==写入文件
writelines()方法 writelines()方法将==字符串序列==写入文件
注意: write() & writelines()方法不能自动在字符串末尾添加换行符,需要自己添加==”\n“==。
14.文件的关闭 可使用try/finally语句 & with语句自动关闭文件
1 2 3 4 5 6 7 8 9 10 11 12 13 File = open ('c:\\hello.txt' ,'w' ) try : File.write("Hello World" ) finally : File.close() --- with open ('c:\\hello.txt' ) as f: s = f.read() print (s)
raise()语句抛出异常
例如:
1 2 3 4 5 x = -1 if x < 0 : raise Exception("x需要是大于等于0的数字" )
15.目录操作
os.makedirs()函数创建新==多级==目录。
os.mkdir()函数创建新==一级==目录。
16.类和对象
类的成员函数必须有一个参数self,而且位于参数列表的开头。self就代表类的实例(对象)自身,可以使用self引用类的属性和成员变量。在类的成员函数中访问实例属性时需要以self为前缀。
17.构造函数 解释:
在对象进行实例化的时候,系统==自动==调用的一个函数叫构造函数,通常此函数用来对实例化对象进行==初始化==。
__init__()
方法是一个特殊的方法,在对象实例化时会被调用,__init__()
方法的作用是初始化。
18.私有成员和公有成员
在定义类的成员时,如果成员名以两个下划线“_ _”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员。
访问方法:
==对象名._类名+私有成员==
19.SQLite数据库
Python自带一个==轻量级==的关系型数据库SQLite。
SQLite是非常小的、轻量级的、自给自足的,==无服务器==,所以不需要安装和管理。
SQLite3采用了==动态==的数据类型,会根据存入值自动判断。
SQLite使用==弱==数据类型,除了主键,对其它字段不指定类型是完全有效的。
20.TCP和UDP的区别
TCP 提供的是面向连接、可靠的字节流服务,并且有流量控制和拥塞控制功能。
UDP 提供的是无连接、不可靠的数据报传输,无流量控制和拥塞控制。
21.科学计算 主要工具:
经典例题 1.数据库操作 要求:
数据库表的创建。
sql批量插入5条记录。
查询,带条件,select * from 表 where 条件
。
删除数据,带条件。
Python SQLite数据库操作
实例代码1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 import sqlite3class Mysqlite (object ): def __init__ (self,dbpath ): self.con = sqlite3.connect(dbpath) self.cur = self.con.cursor() def __del__ (self ): self.close() def execute_sqlite3 (self,sql ): sql = sql.lower() if 'insert' in sql or 'delete' in sql or 'update' in sql or 'create' in sql: self.cur.execute(sql) self.con.commit() print ('done..' ) return elif 'select' in sql : self.cur.execute(sql) data = self.cur.fetchall() print (data) return data def create_table (self,table_name,title ): sql = "CREATE TABLE {}({})" .format (table_name,title) self.execute_sqlite3(sql) def insert_value (self,table_name,value ): sql = "INSERT INTO {} values({})" .format (table_name,value) self.execute_sqlite3(sql) def select_data (self,table_name ): sql = "SELECT * FROM {}" .format (table_name) self.execute_sqlite3(sql) def update_data (self,table_name,field,value,id ): sql = "UPDATE {} set {} = '{}' where id = {}" .format (table_name,field,value,id ) self.execute_sqlite3(sql) def delete_data (self,table_name,id ): sql = "DELETE FROM {} where id = {}" .format (table_name,id ) self.execute_sqlite3(sql) def close (self ): self.cur.close() self.con.close() if __name__ == "__main__" : sqlite = Mysqlite('test.db' ) table_name = 'foo' try : sqlite.create_table(table_name,'id integer primary key autoincrement, name varchar(128), info varchar(128)' ) except : print ("{} created.." ) sqlite.insert_value(table_name,'NULL,\"apple\",\"broccoli\"' ) sqlite.select_data(table_name) sqlite.update_data(table_name,'name' ,"orange" ,1 ) sqlite.select_data(table_name) sqlite.delete_data(table_name,2 ) sqlite.select_data(table_name)
实例代码2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 import sqlite3def selectdb (): try : con = sqlite3.connect("student.db" ) cur = con.cursor() cur.execute("select * from student" ) a=cur.fetchall() if len (a) > 0 : print ("--------------------------------" ) print ("序号" "\t\t" "姓名" "\t\t" "年龄" "\t\t" ) for i in range (len (a)): print (a[i][0 ], " \t" , a[i][1 ], " \t" , a[i][2 ]) print ("--------------------------------" ) else : print ("------信息表为空------" ) con.commit() except Exception as ex: print (ex) finally : cur.close() con.close() def deldb (): try : con = sqlite3.connect("student.db" ) cur = con.cursor() cur.execute("delete from student where name=?" , ("小奥" ,)) cur.execute("select * from student" ) print ("删除数据后:" ) con.commit() selectdb() except Exception as ex: print (ex) finally : cur.close() con.close() def updatedb (): try : con = sqlite3.connect("student.db" ) cur = con.cursor() cur.execute("update student set name=? where id=?" , ("小仔" , 6 )) cur.execute("select * from student" ) print ("更新数据后:" ) con.commit() selectdb() except Exception as ex: print (ex) finally : cur.close() con.close() def main (): con = sqlite3.connect("student.db" ) cur = con.cursor() cur = con.execute("""create table if not exists student ( id integer primary key autoincrement, name varchar(40), age varchar(30))""" ) student = [(1 , "小明" , '18' ), (2 , "小白" , '18' ), (3 , "小奥" , '19' ), (4 , '小火' , '19' ), (5 , '小子' , '17' )] cur.executemany("insert into student(id,name,age) values (?,?,?)" , student) print (cur.rowcount) cur.execute("insert into student(id,name,age) values (6,'小考','17')" ) print (cur.rowcount) con.commit() selectdb() deldb() updatedb() if __name__ == '__main__' : main()
2.TCP&UDP TCP文件下载简单实现
什么是下载?
首先客户端会问服务器,有没有xxx文件?服务器开始寻找,找到后答复客户端,然后客户端在本地新建一个文件,双方实时的发送和接收,待所有接收到的数据都写入到这个文件中,就完成了下载的操作。
所以下载需要两个部分。服务器的发送方和客户端的接收方。
这里不考虑复杂的情况,只实现最简单的逻辑。
客户端参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import socketdef main (): tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_ip = '127.0.0.1' server_port = 8888 tcp_client_socket.connect((server_ip, server_port)) file_name = input ("请输入要下载的文件名:" ) tcp_client_socket.send(file_name.encode("utf-8" )) recv_data = tcp_client_socket.recv(1024 ) if recv_data: with open (file_name + "[接收]" , "wb" ) as f: f.write(recv_data) tcp_client_socket.close() if __name__ == "__main__" :main()
服务端参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import socketdef get_file_content (file_name ): """获取文件的内容""" try : with open (file_name, "rb" ) as f: content = f.read() return content except : print ("没有下载的文件:%s" % file_name) host = '127.0.0.1' port = 8888 def main (): tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) address = ('' , port) tcp_server_socket.bind(address) tcp_server_socket.listen(128 ) while True : client_socket, clientAddr = tcp_server_socket.accept() recv_data = client_socket.recv(1024 ) file_name = recv_data.decode("utf-8" ) print ("对方请求下载的文件名为:%s" % file_name) file_content = get_file_content(file_name) if file_content: client_socket.send(file_content) client_socket.close() tcp_server_socket.close() if __name__ == "__main__" : main()
3.下标和 编写函数实现输入整型列表L,和一个整型参数goal,求列表L中所有满足两两之和为goal的元素的下标。
例如:输入一个整型列表L·=[1,3,5,7,9,2,-1],goal=8,而列表L中所有满足和为goal的元素为: L[0]+L[3]=8 L[1]+L[2]=8 L[4]+L[6]=8 则输出为:((0,3),(1,2),(4,6))
1 2 3 4 5 6 7 8 9 10 11 12 13 L = [1 ,3 ,5 ,7 ,9 ,3 ,2 ,-1 ,3 ] goal = 8 def TwoNumSum (L,goal ): list1 = [] for i in range (len (L)): for j in range (i+1 ,len (L)): if L[i] + L[j] == goal: list1.append((i,j)) return (tuple (list1)) a = TwoNumSum(L,goal) print (a)
4.目录logs 在桌面新建目录logs,并完成以下操作:
在logs目录下新建11个文件,分别作为凌晨0点到早上10点的日志文件,文件命名规则为2021042000.txt~2021042010.txt
,文件内容为长度为10的随机字符串。
将logs目录下所有以.txt结尾的后缀名都改为.log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import os import random import shutil logspath = "C:\\Users\\admin\\Desktop\\logs" s = "wfowiefnguow209384f389" if not os.path.exists(logspath): os.mkdir(logspath) os.chdir(logspath) for i in range (2021042000 , 2021042011 ): filename = str (i) + '.txt' content = '' .join(random.sample(s, 10 )) with open (filename, 'w' ) as f: f.write(content) for file in os.listdir(os.getcwd()): newfile = file.split('.' )[0 ] + '.log' shutil.move(file, newfile)
5.升序排列 scores = [( ‘B’ , 89), ( ‘A’ , 16), ( ‘ C’ , 60), ( ‘D’ , 67)] 用sorted函数对上述列表元素按照成绩升序排列
1 2 3 scores = [('B' , 89 ), ('A' , 16 ), ('C' , 60 ), ('D' , 67 )] a = sorted (scores, key = lambda s: s[1 ]) print (a)
6.包含abc输出 已知下列一组字符串列表,完成以下需求: L=[‘fwieng’,’weiabcfwie’,’ sdfaafaab’,asdfverabc’ ,’ ebeabrifje’ ,’ abcfwefwe’ ] 将所有包含’abc’的字符串输出,例如result=[‘weiabcfwie’,’asdfverabc’,’ abcfwefwe’ ]
1 2 3 4 5 6 7 8 result = [ ] L=['fwieng' , 'weiabcfwie' ,'sdfaafaab' , 'asdfverabc' , 'ebeabrifje' , 'abcfwefwe' ] for s in L : if "abc" in s: result.append(s) print (result)
7.汽车Car 建立一个汽车car类,包括:
属性:汽车颜色color、车身重量weight、速度speed。
构造函数:能初始化各个属性值(speed初始值设为50)。
方法: speedup():将属性值 speed+10 并显示 speed 值; speedCut():将属性值 speed-10 并显示 speed 值; show():显示属性值color、weight、speed。
在主程序中创建实例并初始化各属性值,调用show方法、加速方法、减速方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Car : def __init__ (self , color='' , weight=0 , speed=0 ): self.color = color self.weight = weight self.speed = speed def speedUp (self ): self.speed += 10 print ('车辆正在加速,当前speed值为:' ,self.speed) def speedCut (self ): self.speed -= 10 print ('车辆正在减速,当前speed值为:' ,self.speed) def show (self ): print ('车辆的颜色为:' ,self.color,'车辆的重量为:' ,self.weight,'车辆的速度为:' ,self.speed) if __name__ == '__main__' : c = Car('白色' , 800 , 50 ) c.show() c.speedUp() c.speedCut()
8.数据库查询 前三行数据查询
cur.fetch==all==():返回结果集的剩余行(Row对象列表),无数据时,返回空List。
1 2 3 4 res = cur.fetchall() for line in res: print ("id:{},price:{},name:{}" .format (line[0 ],line[1 ],line[2 ])) line = cur.fetchone()
cur.fetch==many==():返回结果集的多行(Row对象列表),无数据时,返回空List。
1 2 3 4 res = cur.fetchmany(3 ) for line in res: print ("id:{},price:{},name:{}" .format (line[0 ],line[1 ],line[2 ])) line = cur.fetchone()
尾巴