1、判断

# 非空即真、非0即真

# 不为空的话就是true,是空的话就是false

# 只要不是0就是true,是0就是false

# 布尔类型

# True False

name = input('请输入你的名字:').strip()
a = [] #false
d={} # false
c = 0 #false
f = tuple() #false
e='' #false
 
if name: #name里面有没有东西,
print('name不是为空的。。')
else:
print('输入不能为空。。')
# a = b = c = 0 #定义了3个变量 ,值都是0

 

2、交换变量

方法1:

a = 1
b = 2
a = a+b # 3
b = a-b # 1
a = a-b # 2
print(a,b)

方法2:

b,a= a, #交换两个变量的值,Python底层帮你引入了一个的第三方变量在交换

print(a,b)

 

3、字符串方式

a = 'Python&^^'
# print(a.count('t'))
# print(a.index('t'))
# print(a.find('t'))
# print(a.replace('t','T'))
# print(a.isdigit()) #是否全都是数字
# print(a.islower()) #是否全都是x小写字母
# print(a.isupper()) #是否全都是大写字母
# print(a.isalpha()) #是否全都是汉字或者字母
# print(a.isalnum()) #只要里面没有特殊符号,就返回true &…
# print(a.upper()) #变成大写
# print(a.lower())#变成小写
# print(a.startswith('test')) #以xx开头
# print(a.endswith('.xls')) # 以xx结尾
import string
print(string.ascii_lowercase) #所有的小写字母
# print(string.ascii_uppercase) #所有大写字母
# print(string.digits) #所有的数字
# print(string.ascii_letters) #所有大写字母和小写字母
# print(string.punctuation) #所有的特殊字符
# l=['zhang','liu','liang']
# res = ','.join(string.ascii_lowercase) #1、join把list的字符串连接起来,它把一个list变成了字符串

#2、通过某个字符串把list里面的每个元素连接起来

#3、只要join里面的内容可以循环的,join都可以帮你连起来

# names='abcd'
# print(list(names))
# name_list = names.split()#根据某个字符串,分割字符串,什么也不传的话,是以空格分割的
# print(name_list)
# user='关羽'
# sex='男'
# age=18
# addr='回龙观'
# money= '1000w'
# cars='1w台'
# # words = 'insert into user values ("%s","%s","%s","%s","%s","%s");'%(user,sex,age,addr,money,cars)
# sql = 'insert into user values ("{name}","{sex}","{age}","{addr}","{qian}","{che}");'
# new_sql = sql.format(age=age,che=cars,name=user,sex=sex,qian=money,addr=addr)
# print(new_sql)
print('欢迎登录'.center(50,'*'))

 

4、集合

#python数据类型有: int float list dict tuple set

集合set是Python中一种基本数据类型,它分为可变集合(set)和不可变集合(frozenset)两种。类似于其他语言,集合是一个无序不重复元素集,包括创建集合set、向集合中添加元素、删除集合中的元素、求集合的交集、并集、差集等操作。

set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组进行去重操作。

# 集合特性:天生去重

import copy

#浅拷贝

#深拷贝

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象

# lis = [1,1,2,3,4,5,6,8] #循环删list里面的数据的时候,结果会不正确
# l2 = copy.deepcopy(lis) #深拷贝
# # l2 = lis #浅拷贝
# print(id(lis))
# print(id(l2))
# l2.append('zhangliuliang')
# # lis.remove(8)
# print(lis)
# print(id(l))
# print(id(l2)) #浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间
# 0 1 2 3 4 5 6 7
# for i in l2:
# if i%2!=0:
# l.remove(i)
# print(l)
 
 
# 集合天生就能去重,集合也是无序的
s=set() #空集合
s2 = set('1234445566778')
print(s2)
s3 = {'1','1','3','4','5','6','7','9'}
d = {'k':'v'}
# 交集 并集 差集
# 就是两个集合相同的地方
# print(s3 & s2) #取交集
# print(s3.intersection(s2)) #取交集
#并集
# 就是把两个集合合并到一起,然后去重
# print(s2 | s3) #取并集
# print(s2.union(s3)) #取并集
s4 = {1,2,3}
s5 = {1,4,6}
#差集
#在一个集合里有,在另一个集合里面没有的
# S4里面有,s5里面没有的
# 取一个集合存在,另一个不存在的元素
# print( s4 - s5) #取差集
# print(s4.difference(s5)) #取差集
#对称差集
#俩集合里面都没有
#去掉俩集合里面都有的
# print(s4 ^ s5)
# print(s4.symmetric_difference(s5))
s4.add('ss') #加元素
s4.pop()#随机删一个
s4.remove('ss')#指定删除哪个
s4.update({1,2,3}) #把另外一个集合加进去
s4.isdisjoint(s5)#如果没有交集的话返回true

 

5、文件操作

file 对象使用 open 函数来创建,

open('words')
# python 2 \python3a是一样的
# file() #python2
#utf-8 bbk
# 读模式r 写模式w 追加模式a
f = open('names','a+',encoding='utf-8') #打开文件
print(f.read()) #读文件
# print(f.readline()) #读取一行内容
# print(f.readlines()) #是把文件的每一行放到一个list里面
f.write('双方都')#写入
# print(f.read())
#只要沾上了r,文件不存在的就会报错
#只要沾上了w,都会清空原来的内容
 
# 读模式 r 读写模式 r+
#1、不能写
#2、文件不存在的话会报错
# 写模式 w 写读模式 w+
#1、文件不存在的话,会帮你新建文件
#2、打开一个已经存的文件,他会清空以前文件的内容
#3、不能读
 
# 追加模式 a 追加读模式 a+ #文件末尾去增加内容
# 1、文件不存在的话,会帮你新建文件
# 2、打开一个已经存的文件,不会清空,末尾增加
# 3、不能读
 
#1、先开打一个不存在,写点多东西
# 2、打开一个已经存的文件,写点东西
# 3、 读内容

 

文件指针:

用来记录文件到底读到哪里了

f = open('naems','a+',encoding='utf-8')

a模式的文件指针是在末尾的

f.write('呵呵呵')
f.seek(0) #移动文件指针到最前面
f.write('因为爱情') #移动完文件指针之后,是只能读,写的时候还是在文件末尾写
print(f.read())

 

文件练习示例1:

import random
#18612343,
#12384234
# 1861253 2945
print(random.randint(1,9999))
print('1'.zfill(4))

#1、先随机产生一些手机号
#2、写到文件里面
f = open('phones.txt', 'w')
num = input('请输入你要产生的手机号个数:')
for i in range(int(num)):  #
   start = '1861235'
   random_num = str(random.randint(1, 9999))
   new_num = random_num.zfill(4)#补0
   phone_num = start+new_num  #这一行有问题
   f.write(phone_num+'\n')
f.close()

文件练习示例2:

#需求

# 1、监控日志,如果有攻击咱们的,就把ip加入黑名单

 #分析:

#1、打开日志文件

#2、把ip地址拿出来

#3、判断每一个ip出现的次数,如果大于100次的话,加入黑名单

#4、每分钟读一次

 #直接循环一个文件对象的话,每次循环的是文件的每一行

#文件句柄 文件对象

import time

point = 0  # 每次记录文件指针的位置
while True:
    all_ips = [] #存放所有的ip地址
    f = open('access.log',encoding='utf-8')
    f.seek(point)#移动文件指针
    for line in f:
        ip = line.split()[0]
        all_ips.append(ip)
    point = f.tell() #记录了指针的位置
    all_ip_set = set(all_ips)  #
    for ip in all_ip_set:
        if all_ips.count(ip)>50:
            print('应该加入黑名单的ip是%s'%ip)
    f.close()
    time.sleep(60) #暂停60秒

# for i in all_ips:
#     if all_ips.count(i)>100:
#         print('攻击的ip是%s'%i)