今天我们继续学习python的语法:
一,互换变量
1 a =1
2 b =2
3 c =3
4 #以前的老方法,其他语言写的
5 c = None
6 c = b
7 b = a
8 a = c
9 print(a,b)
10
11 #python里面交换值
12 b,a = a,b
13 print(a,b) #交换两个变量的值,Python低层帮你引入第三方变量在交换
14 b,a,c=a,c,b#对应值互换
15
16
17 #不通过第三方变量交换值
18 a = a+b #3
19 b = a-b #1
20 a = a-b #2
21 print(a,b)
View Code
二,判断【非空即真,非零即真】
1 #非空即真,非0即真
2 # 不为空的话就是true,是空的话就是false
3 # 只要不是0就是true,是0就是false
4 a=[]#list也是假的
5 b={}#字典也是假的
6 c=0 #也是假的
7 f=tuple() #也是假的
8 e= ''#也是假的
9 name = input('输入你的姓名').strip()
10 if name: #name里面有没有东西
11 print('输入正确了')
12 else:
13 print('输入不能为空')
14
15 #布尔类型
16 #true false
17 print(bool(''))
18 print(bool('aa'))
19
20
21 a=b=c=0#这样代表定义了3个变量,值都是0,也可以这样定义
View Code
三.字符串方法
1 a='python'
2 print(a.isalpha())#是否全都是汉字或者字母
3 print(a.isalnum())#只要里面没有特殊符号就返回true
4 print(a.isupper())#是否全部是大写字母
5 print(a.islower())#是否全部是小写字母
6 print(a.isdigit())#是否全部是数字
7 print(a.isalpha())#判断是否全是汉字或者字母
8 print(a.isalnum())#只要没有特殊符号,都返回true
9
10
11 import string
12 print(string.ascii_uppercase) #所有小写字母
13 print(string.ascii_lowercase) #所有大写字母
14 print(string.digits) #所有数字
15 print(string.ascii_letters)#所有大写字母和小写字母
16 print(string.punctuation)#所有的特殊字符
17
18 #下面是两个方法
19 ''.join('') #连接字符串
20 #他把一个list变为字符串
21 # 通过某个字符串把list里面的每个元素连接起来
22 print(','.join(string.ascii_lowercase))
23 # 只要是可以循环的,join都可以帮你连接起来
24 # ''.split('')
25 t=['a','b','c','d']
26 res=''.join(t)
27 res1='-----'.join(t)
28 print(res)
29 print(res1)
30
31
32 names='admin,zhansga,hah ,huahu'
33 hh=names.split(',')#根据某个字符串,分割字符串,以谁隔开,谁就不存在了,如果什么都不传的话,是以空格分割的
34 hh1=names.split('h')#aplit只能是字符串方法
35 print(hh,hh1)
36
37 user = '张三'
38 sex = '男'
39 age = 17
40 addr = '珠海'
41 moneny = '10w'
42 cars = '1w台'
43
44 sql = 'insert into user values ({user},{sex},{age},{addr},{moneny},{che});'
45 new_sql=sql.format(age=age,che=cars,user=user,sex=sex,moneny = moneny,addr=addr)
46 print(new_sql)
47
48
49 #加*号
50 print('欢迎登录'.center(50,'*'))
View Code
四。集合
1.深拷贝与浅拷贝
1 import copy #引入拷贝模块
2 #浅拷贝
3 #深拷贝
4 l=[1,1,2,3,4,5,6,8]#单独一个list循环删除list里面的数据的时候,结果会不正确
5 l2=copy.deepcopy(l)#深拷贝 浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间
6 print(id(l))
7 print(id(l2))#获取内存地址id
8 for i in l2:
9 if i%2!=0:
10 l.remove(i)
11 print(l)
12
13
14 l2=l #浅拷贝
15 l2.append('aa')
16 print(l2)
View Code
2.集合天生去重,集合也是无序的 set表示集合
s = set()#定义空集合
s2 = set('1234445566778')
s3 = {'1','1','3','4','5','6','7','9'}
print(s2)
View Code
3.交集与并集
1 #取交集
2 s2 = set('1234445566778')
3 s3 = {'1','1','3','4','5','6','7','9'}
4 print(s3&s2)#取交集 类型要一致
5 print(s3.intersection(s2))#取交集
6
7 #取并集 就是把两个集合合并到一起,然后去重
8 print(s2|s3) #取并集
9 print(s2.union(s3))#取并集
View Code
4.差集与对称差集
1 s4 = {1,2,3}
2 s5 = {1,4,6}
3 #取差集 取s4为准,s5里面有的 那么s4就去除这个有的
4 print(s4-s5) #取差集
5 print(s4.difference(s5))#取差集
6 #
7 # #对称差集 去掉两个集合里面都有的
8 print(s4^s5)#对称差集
9 print(s4.symmetric_difference(s5))#对称差集
View Code
5.增加,删除集合
1 s4 = {1,2,3}
2 s5 = {1,4,6}
3 s4.add('ss')#增加元素
4 s4.pop()#随机删一个
5 s4.remove('ss')#指定删除那个
6 s4.update({1,2,4})#把另外一个集合加进去
7 print(s4)
8 s4.isdisjoint(s5)#如果没有交集返回true
View Code
6.用集合校验密码的复杂程度,一个小练习
1 #校验密码里面是否含
2 #数字 ,大写字母,小写字母,特殊字符
3 import string
4 nums_set = set(string.digits)
5 upper_set=set(string.ascii_uppercase)
6 lower_set=set(string.ascii_lowercase)
7 pun = set(string.punctuation)
8 for i in range(5):
9 pwd= input('请输入密码:').strip()
10 pwd_set=set(pwd)
11 if pwd_set&nums_set and pwd_set&upper_set and pwd_set&lower_set and pwd_set&pun:
12 print('密码是合法的:',pwd)
13 else:
14 print('密码必须包含大小写字母,数字,特殊字符')
View Code
五.文件操作
文件打开分为三种模式:读模式,写模式,追加模式
1 # python2.0的版本写的是file()
2 #文件打开的三种方式:读模式 写模式 追加模式
3 f=open('words2','r',encoding='utf-8')#默认是一个r 读模式
4 f=open('words','w',encoding='utf-8')#写模式
5 f=open('words','a',encoding='utf-8')#追加模式
6
7 #简单的打开和读写文件
8 f=open('words',encoding='utf-8')#打开文件
9 # windows操作系统下面需要增加encoding不然会报错:UnicodeDecodeError:
10 # 'gbk' codec can't decode byte 0xb9 in position 20: illegal multibyte sequence
11 print(f.read())#读文件
12 print(f.readline())#读取一行内容
13 print(f.readlines())#是把文件的每一行放到一个list里面
14 print(type(f.readlines()))
15 f.write('我是好人haha')#写入 报错:io.UnsupportedOperation: not writable io.UnsupportedOperation: not writable
16
17 #模式只要沾上R+,文件不存在就会报错
18 #模式只要沾上w+,都会清空原来的内容
19
20 f=open('words','a+',encoding='utf-8')
21 f.write('哈哈')
22 print(f.read())
23
24 #读模式 r 读写模式r+
25 #1.不能写
26 #2.文件不存在的话,会报错
27
28
29 # f=open('words','w+',encoding='utf-8')
30 # print(f.read())
31 #写模式 w 写读模式w+
32 #1.如果文件不存在的话,会帮你新建一个文件
33 #2.打开一个已经存在的文件,会清空以前的文件内容
34 #3.不能读,报错
35
36 # f=open('words1','a',encoding='utf-8')
37 # print(f.read())
38 #追加模式 a 追加读模式 a+ 文件末尾去增加内容
39 #1.先打开一个不存在,新建一个文件
40 #2.打开一个已经存在的文件,不会清空,末尾增加
41 #3.不能读
View Code
六,文件指针
1 #文件指针
2 # 用来记录文件到底读到哪里了
3 f=open('names','a+',encoding='utf-8')
4 #a模式默认文件指针是在末尾的 所以读不到文件内容
5 f.write('呵呵')
6 print(f.read())
7
8 f = open('name','a+',encoding='utf-8')
9 f.seek(0)#移动文件指针到最前面 就能读出文件
10 f.write('\n我最美')#移动完文件指针之后,是只能读,写的时候还是在文件末尾写
11 print('read读的:',f.read())
View Code
1.文件指针练习
1 import random
2 #随机生成一些手机号 1861253 3453
3 # print(random.randint(1,9999))#随机产生一个1到1000的数字
4 # print('1'.zfill(4))#这个方法用于补领
5 # 1.先随机产生一些手机号
6 # 2.写到文件里面
7 f=open('phone.txt','w')
8 num = input('请输入你要产生的手机号个数:')
9 for i in range(int(num)):
10 start = '1861253'
11 random_num=str(random.randint(1, 9999))
12 new_num = random_num.zfill(4)
13 phone_num = start+new_num
14 f.write(phone_num+'\n')#\n代表就是换行的意思
15 f.close()#关闭文件
View Code
七,综合上面的讲述,练习题
1 # 读日志文件,监控日志,如果有攻击我们,就把ip加入黑名单
2 # 分析
3 # 1.打开日志文件
4 # 2.把ip地址拿出来
5 # 3.判断每一个ip出现的次数,如果大于100次,就加入黑名单
6 # 每分钟读一次
7
8 #直接循环一个文件对象的话,每次循环的是文件的每一行
9 #f一般叫做文件句柄 文件对象
10 import time
11 point = 0 #每次记录文件指针位置
12 while True:
13 all_ips=[]#存放所有的ip地址
14 f=open(r'C:\Users\Administrator\Desktop\access.log',encoding='utf-8')#路径前面早呢更加一个r是为了让路径变为一个普通的字符串
15 f.seek(point)#移动文件指针
16 for line in f:
17 ip = line.split()[0]
18 all_ips.append(ip)
19 point = f.tell() # 获取到当前文件指针的位置 记录指针的位置
20 all_ip_set = set(all_ips)#利用集合去重
21 for ip in all_ip_set:
22 if all_ips.count(ip)>30:
23 print('应该加入黑名单的名单是:%s'%ip)
24 f.close()
25 time.sleep(60)#暂停60秒,隔60秒读一次
View Code
八。自动关闭文件
1 with open('names','a+') as f:
2 for line in f:
3 print(line)
View Code