zoukankan      html  css  js  c++  java
  • Python笔记三(互换变量,文件操作,文件指针,集合)

    今天我们继续学习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('
    我最美')#移动完文件指针之后,是只能读,写的时候还是在文件末尾写
    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+'
    ')#
    代表就是换行的意思
    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:UsersAdministratorDesktopaccess.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
  • 相关阅读:
    普通父类和抽象父类
    properties文件的读取和写入
    HTTPS接口获取数据报错的问题
    SpringMVC中bean之间的相互应用(循环引用)
    JAVA代码进行排序以及模糊查询
    从TXT读取文本和将数据写入TXT文本的两种方式
    EXCEL最简洁导出(不带样式设置)
    5种线程池的创建方法和作用
    html5是什么
    J2EE,JSP,Java的区别
  • 原文地址:https://www.cnblogs.com/xmhd/p/8710018.html
Copyright © 2011-2022 走看看