PYTHON自动化Day4-交换变量,字符串方法,拷贝,集合,文件,文件指针

一.判断

#   非空即真、非0即真
# 不为空的话就是true,是空的话就是false
# 只要不是0就是true,是0就是false# 布尔类型
# True  False
name = input('请输入你的名字:').strip()
a = [] #false
d={} # false
c = 0 #false
f = tuple() #false
e='' #falseif name:  #name里面有没有东西,print('name不是为空的。。')
else:print('输入不能为空。。')
# a = b = c = 0  #定义了3个变量 ,值都是0

二.交换变量

a = 1
b = 2#交换变量如果不定义第三个变量的方法:
a = a+b  # 3
b = a-b  # 1
a = a-b  # 2
print(a,b)#python中的做法:
b,a= a,b #交换两个变量的值,Python底层帮你引入了一个的第三方变量在交换, 多个变量交换也可以 如: a,b,c=b,c,a
print(a,b)

三. 字符串方法:

print(a.index('t'))  #找下标
print(a.find('t'))  #找下标
# 1 find()方法:查找子字符串,若找到返回从0开始的下标值,若找不到返回-1
info = 'abca'
print( info.find('a'))##从下标0开始,查找在字符串里第一个出现的子串,返回结果:0
info = 'abca'
print (info.find('a',1))##从下标1开始,查找在字符串里第一个出现的子串:返回结果3
info = 'abca'
print( info.find('333'))##返回-1,查找不到返回-1
# 2 index()方法:
# python 的index方法是在字符串里查找子串第一次出现的位置,类似字符串的find方法,不过比find方法更好的是,如果查找不到子串,会抛出异常,而不是返回-1
info = 'abca'
print(info.index('a'))
print(info.index('33'))
# rfind和rindex方法用法和上面一样,只是从字符串的末尾开始查找。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、它把一个list变成了字符串
#2、通过某个字符串把list里面的每个元素连接起来
#3、只要是可以循环的,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,'*'))
print('1'.zfill(4))  #自动补足4位,前面补0

 四.深拷贝,浅拷贝

# int float list dict tuple  set
# 天生去重
import copy
#浅拷贝
#深拷贝

lis = [1,1,2,3,4,5,6,8]
l2 = copy.deepcopy(lis) #深拷贝
# l2 = lis   #浅拷贝
print(id(lis))
print(id(l2)) #id和lis的不同
l2.append('aaa')
lis.remove(8)
print(lis)
print(l2)
# print(id(l))
print(id(l2))   #浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间,连个list相互独立不受影响#动态循环删list里面的数据的时候,结果会不正确
l=[1,1,2,3,4,5,6,8]
#  0 1 2 3 4 5 6 7    第一次取下标0的元素1,然后删掉
# [1,2,3,4,5,6,8]
#  0 1 2 3 4 5 6      第二次取下标1的元素2, 所以第一个元素被跳过了没有检查
print(l)
for i in l:if int(i)%2!=0:l.remove(i)
print(l)  #[1, 2, 4, 6, 8]  #为什么多了一个1?因为是根据下标循环list的,操作后元素的位置变了#所以我们定义两个相同的list,用第二个循环,用第一个删除,结果就正确了,因为可以保证没有元素都被检查到了
l2=copy.deepcopy(l)
for i in l2:if int(i)%2!=0:l.remove(i)
print(l)

五.集合

# 集合天生就能去重,集合也是无序的
s=set()  #空集合
s2 = set('1234445566778')
# print(s2)
s3 = {'1','1','3','4','5','6','7','9'}  #自己定义一个集合,和字典的区别是字典有key:value
#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,可以用于判断是否不包含黑名单中的内容

学会了集合后,判断密码复杂性就更方便了:

# 校验密码里面是否包含
# 数字、大写字母、小写字母、特殊符号
import string
nums_set = set(string.digits)
upper_set = set(string.ascii_uppercase)
lower_set = set(string.ascii_lowercase)
pun = set(string.punctuation)
for i in range(5):pwd=input('请输入密码:').strip()pwd_set = set(pwd)if pwd_set & nums_set and pwd_set & upper_set and pwd_set & lower_set and pwd_set & pun:print('密码是合法的',pwd)else:print('密码必须包含大写字母、小写字母、数字和特殊字符')

六.文件操作

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

七.文件指针

# 文件指针:
# 用来记录文件到底读到哪里了
f = open('naems','a+',encoding='utf-8')
# a模式的文件指针是在末尾的
f.write('呵呵呵')
f.seek(0)  #移动文件指针到最前面
f.write('鹏妹妹')   #移动完文件指针之后,是只能读,写的时候还是在文件末尾写
f.seek(0)
print(f.read())

小练习,自动产生电话号码,并写入到一个文件中:

import random
#18612343,
#12384234
# 1861253 2945
print(random.randint(1,9999))
print('1'.zfill(4))  #自动补足4位,前面补0#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)#补0phone_num = start+new_num  f.write(phone_num+'\n')
f.close()

小练习:

#需求
# 1、监控日志,如果有攻击咱们的,就把ip加入黑名单#分析:#1、打开日志文件#2、把ip地址拿出来#3、判断每一个ip出现的次数,如果大于100次的话,加入黑名单#4、每分钟读一次#直接循环一个文件对象的话,每次循环的是文件的每一行
#文件句柄   文件对象
import timepoint = 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)

 八.自动关闭文件

with open('geci','a+') as f:for line in f:pass

 作业:

#1、写一个自动生成密码文件的程序
1、你输入几,文件里面就给你产生多少条密码
2、密码必须包括,大写字母、小写字母、数字、特殊字符
3、密码不能重复
4、密码都是随机产生的
5、密码长度6-11
http://www.nnzhp.cn/archives/150
随机数怎么用 参考 random模块怎么用
import random,string
i = input("请输入需要产生的条数:")
f = open("passwd.txt",'w')
str = string.ascii_letters + string.punctuation + string.digits
list = []
passwd_insert=''
a = 0
while a<int(i):passwd_new = []passwd_new.append(random.choice(string.digits))passwd_new.append(random.choice(string.punctuation))passwd_new.append(random.choice(string.ascii_lowercase))passwd_new.append(random.choice(string.ascii_uppercase))passwd_new=random.sample(str,random.randint(2,7)) + passwd_newrandom.shuffle(passwd_new)print(passwd_new)passwd_insert = ''.join(passwd_new)if list.count(passwd_insert):continueelse:list.append(passwd_insert)f.write(passwd_insert + '\n')a+=1
f.close()
#2、写一个注册的程序,账号和密码都存在文件里面。
choice = input('请输入你的选择:1,注册2、删除用户3、登录')
#注册
输入
账号
密码
密码确认
# #需要校验用户是否存在,两次输入的密码,是否一致,为空的情况
#账号和密码都存在文件里面
#删除
输入一个用户名
#需要校验用户是否存在
#登录
输入账号密码登录
user_info = {} #存放所有的用户
with open('users.txt') as f:for line in f:# niuhanyang,123456\nline = line.strip()temp  = line.split(',')username = temp[0]pwd = temp[1]user_info[username]=pwd
for i in range(3):choice = input('请输入你的选择''1、登录 2、注册 3、删除').strip()if choice=='1':username = input('username:').strip()pwd = input('pwd:').strip()if username and pwd:if username in user_info:if user_info.get(username)==pwd:print('登录成功')else:print('账号密码错误!')else:print("user not found!")else:print('账号密码不能为空!')elif choice=='2':username = input('username:').strip()pwd = input('pwd:').strip()cpwd = input('cpwd:').strip()if username and pwd and cpwd:if username in user_info:print('该用户已经被注册!')else:if pwd==cpwd:user_info[username]=pwdprint('恭喜,注册成功!')else:print('两次输入的密码不一致!')else:print('不能为空!')elif choice=='3':username = input('username:').strip()if username:if username in user_info:user_info.pop(username)print('删除成功!')else:print('不能为空!')else:print("输入有误,请重新输入")
else:with open('users.txt','w') as fw:for uname,pwd in user_info.items():fw.write(uname+','+pwd+'\n')

 

转载于:https://www.cnblogs.com/lilyzhang-2018/p/9878495.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ajax-jsonp

一、什么是Jsonp jsonp(json with padding) 是一种“使用模式”&#xff0c;可以让网页从别的域名那获取资料&#xff0c;即跨域读取数据。 为什么会使用jsonp呢&#xff1f;因为同源策略&#xff08;数据来源一致&#xff09;&#xff0c;现在所有支持javascript 的浏览器都会…

javascript --- [读书笔记] 回流与重绘 前端优化小结

1. 浏览器渲染原理 请说出: 从用户在浏览器地址输入网址,到看整个页面,中间都发生了哪些事情? HTTP请求阶段HTTP响应阶段浏览器渲染阶段 1.1 可能用到的知识 1.1.1 进程 Process、线程 Thread、 栈内存 Stack 进程: 就是开的每一个程序: QQ、网易云音乐、Typora、VSCode……

ARP协议,以及ARP欺骗

1.定义&#xff1a; 地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机&#xff0c;并接收返回消息&#xff0c;以此…

css --- [小结]让盒子水平垂直居中的解决方案

描述 有如下模型,想办法让 <style>.box{width: 500px;height: 500px;background: skyblue;} </style> <div class"box"><div class"inner"></div> </div>想办法让inner在box中水平垂直居中 方案1: 使用绝对定位 让…

数组洗牌 Fisher Yates

看播放器代码时发现的这个洗牌算法&#xff0c;再网上查了一番 作用是把数组变成随机序列&#xff0c;原理类似于从牌堆A中随机抽牌放进牌堆B 代码1&#xff1a; 返回一个由&#xff08;数组下标&#xff09;组成的数组 function random(length) {function shuffle (arr) {for…

一个不错的MYSQL数据库备份类,PHP版,一个文件,精简版

1 <?php2 class DbManage {3 var $db; // 数据库连接4 var $database; // 所用数据库5 var $sqldir; // 数据库备份文件夹6 // 换行符7 private $ds "\n";8 // 存储SQL的变量9 public $sqlContent "";10 // 每条sql…

javascript --- 堆栈内存与闭包的作用

你可能会用到的 堆内存: 存储引用类型值所在的空间栈内存: 存储基本类型值和存储代码所在空间函数上下文: JS每一个函数在执行的时候都会创建一个执行上下文 1. 堆内存中的数字和字符串都是相等的 let a {}, b0, c0; a[b] marron; a[c] Mar console.log(a[b]) // Mar第一…

python_sting字符串的方法及注释

string类型是python内置的类型&#xff0c;无需安装 方法/属性说明 capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中&#xff0c;并使用空格填充至长度width的新字符串 count(sub[,start[,end]]) …

作业3

import turtle turtle.bgcolor(red) turtle.color(yellow)turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(100)turtle.right(144) turtle.end_fill() turtle.done()转载于:https://www.cnblogs.com/zhangkef97/p/9016608.html

javascript --- [小练习]变量提升、优先级综合

求下列函数输出结果 function Foo() {getName function() {console.log(1)}return this } Foo.getName function() {console.log(2) } Foo.prototype.getName function() {console.log(3) } var getName function() {console.log(4) }function getName() {console.log(5) …

Confluence 6 自定义 Decorator 模板的宏和针对高级用户

宏 页面的某些部分使用的是 Velocity 宏进行创建的&#xff0c;包括导航栏。有关宏的创建&#xff0c;你可以参考页面 Working With Decorator Macros 页面中的内容。 针对高级用户 velocity 目录是 Confluence 首先进行模板搜索的查找路径。你可以对 Confluence 的 velocity …

Matlab之rand(), randn(), randi()函数的使用方法

1. rand()函数用于生成取值在&#xff08;0~1&#xff09;之间均匀分布的伪随机数。rand(n)&#xff1a;生成n*n的0~1之间的满足均匀分布的伪随机矩阵&#xff1b;rand(m,n)&#xff1a;生成m*n的伪随机数&#xff1b;rand(m,n,double)&#xff1a;生成m*n的双精度伪随机数&am…

javascript --- [有趣的条件]双等号的隐式调用和数据劫持

1 双等号的隐式调用和数据劫持 求下面条件,在a为什么样时,等号成立 if(a 1 && a 2 && a 3){console.log(等号成立) }1.1 双等号的隐式转换 首先得了解双等号的隐式转换规则 等式备注对象 字符串隐式调用 toString方法将对象转换成字符串null undeifne…

分组查询

1、简单分组查询 语法形式&#xff1a; select function() from table_name where condition group by field; 进行分组查询时&#xff0c;分组所依据的字段上的值一定要有重复值&#xff0c;否则分组没有任何意义。 2、实现统计功能分组查询 关键字group by单独使用时&#xf…

深入探讨多模态模型和计算机视觉

近年来&#xff0c;机器学习领域在从图像识别到自然语言处理的不同问题类型上取得了显着进展。然而&#xff0c;这些模型中的大多数都对来自单一模态的数据进行操作&#xff0c;例如图像、文本或语音。相比之下&#xff0c;现实世界的数据通常来自多种模态&#xff0c;例如图像…

移动硬盘函数不正确要如何寻回资料

移动磁盘打不开函数不正确&#xff0c;是因为这个I盘的文件系统内部结构损坏导致的。要恢复里面的数据就必须要注意&#xff0c;这个盘不能格式化&#xff0c;否则数据会进一步损坏。具体的恢复方法看正文 工具/软件&#xff1a;AuroraDataRecovery 步骤1&#xff1a;先百度搜索…

vue --- [全家桶]vue-router

1. Vue - router Vue Router是 Vue.js 官方的路由管理器它和Vue.js的核心深度集成,可以非常方便的用于SPA应用程序的开发 Vue Router包含的功能有: 支持HTML5历史模式或hash模式支持嵌套路由支持路由参数支持编程式路由支持命名路由 <div id"app"><rout…

HashMap的四种访问方式

第一种&#xff1a;通过Map.entrySet使用iterator遍历key和value 1 public void visit_1(HashMap<String,Integer> hm){ 2 Iterator<Map.Entry<String,Integer>> it hm.entrySet().iterator(); 3 while(it.hasNext()){ 4 Map.Entry<String ,Integer> …

16.unix网络编程一卷 unp.h

unix网络编程 --ubuntu下建立编译环境 1.安装编译器&#xff0c;安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下载unp13e&#xff1a; http://pix.cs.olemiss.edu/csci561/prg561.1.html 3.进入unp13e 查看readme&#xff0c;照下列提示操作…

webpack --- [读书笔记] webpack中常用的一些配置项

1. Webpack 当前Web开发面临的困境 文件依赖关系错综复杂静态资源请求效率低模块化支持不友好浏览器对高级JavaScript特性兼容程度低 1.1 webpack概述 webpack是一个流行的前端项目构建工具,可以解决当前web开发中所面临的困境. webpack提供了友好的模块化支持,以及代码压…