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
  • 相关阅读:
    739. Daily Temperatures
    556. Next Greater Element III
    1078. Occurrences After Bigram
    1053. Previous Permutation With One Swap
    565. Array Nesting
    1052. Grumpy Bookstore Owner
    1051. Height Checker
    数据库入门及SQL基本语法
    ISCSI的概念
    配置一个IP SAN 存储服务器
  • 原文地址:https://www.cnblogs.com/xmhd/p/8710018.html
Copyright © 2011-2022 走看看