注:本章节内容是看了小象学院视频教程之后的笔记整理。
本章节内容涉及到的 python 知识点:
1.python 字符串的判断函数 : str.isnumeric() str.isalpha() str.islower() str.isupper()
更多关于isxxx()方法请参考 https://docs.python.org/3/library/stdtypes.html#string-methods
2.python 文件的操作 : 打开文件 -> 操作文件(读写等) -> 关闭文件
打开文件:建立文件与程序的关联
open(filename, mode) filename:文件名(包括路径) mode:打开模式
打开模式 | 含义 |
r | 只读,文件不存在则报错 |
w | 只写,文件不存在则自动创建 |
a | 在文件末尾附加写入内容 |
r+ | 读写 |
写入操作:
write() : 将文本写入文件中
writelines():将字符串列表写入到文件中
关闭文件:终止程序与文件的关联
close()
3.python 读取保存的文件
读取操作:从文件读取数据到计算机内存中
read():返回值为包含整个文件内容的一个字符串
readline():返回值为文件下一行的内容的字符串
readlines();返回值为整个文件内容的列表,每项是以换行符为结尾的一行字符串
4. python 文件遍历
以下是几种写法
print('第一种方式')
f = open('tmp.txt','r')
for line in f.readlines():
# 处理一行数据
print(line)
f.close()
print('第二种方式')
f = open('tmp.txt','r')
for line in f :
#处理一行数据
print(line)
f.close()
print('第三种方式')
f = open('tmp.txt','r')
content = f.read()
print(content)
f.close()
5.python 将相关方法封装成一个整体 ;面向对象编程
- 面向过程(pop):以程序执行过程问设计流程的编程思想
- 面向对象(oop):以实物为中心的编程思想
- 对象(object): 现实世界中的对象: 属性 + 行为
对象的例子; a)波斯猫 , 属性:品种、颜色、大小; 行为;叫,捉老鼠
b)吉普车 ,属性: 类型,用途; 行为: 发动,行驶,停车, 载人
c)华为手机 属性:型号,配置,颜色 行为: 打电话, 关机,上网
- 类(calss):某种类型集合的描述
- 属性:类本身的一些特性
- 方法:类所能实现的一些行为
类的定义:
calsss ClassName
__init__(self ,...) 构造函数:初始化对象的个属性 self代表类的实例 , ... 表示传递的参数
注:调用之前必须实例化先
如以下的用法
class FileTool: def __init__ (self, filepath) : self.filepath = filepath def write_to_file(self,line): f = open(self.filepath, 'a') f.write(line) f.close() def read_from_file(self): f = open(self.filepath,'r') lines = f.readlines() f.close() return lines
filepath = 'abc.txt' line_temp = 'hello_test_20190730' # 实例化文件工具对象 file_tool = FileTool(filepath) # 调用类中的函数 read = file_tool.read_from_file() print(read) file_tool.write_to_file(line_temp)
6.将文件操作封装到一个类中
- 封装 : 将数据及相关操作打包在一起, 支持代码复用
- 继承 :子类(subclass)继承父类(superclass)的行为 ; 避免重复操作,提升代码的复用程度 ;定义class ClassName(superClassName)
- 多态 :在不同情况下用一个函数名启用不同方法; 灵活性
lesson_1:
案例描述:
密码强度,是指一个密码对抗猜测或时暴力破解的有效程度;一般是指一个未授权的访问者得到正确密码的凭据尝试次数。
本节使用简易版的规则:
1)密码长度至少8位
2)密码含有数字
3)密码含有字母
设置一个变量strength_level用于记录密码强度,初始为0.满足规则的一个条件对其加1
长度判断:使用 len() 方法
包含数字判断:使用isnumeric()方法
包含字母判断:使用isalpha()方
strengh_level 等于 3 ,密码强度合格,否则不合格
本节使用到的代码及运行结果
"""
作者:
功能:判断密码的强弱
版本:v1.0
日期:20190729
"""
def check_number_exist(password_str):
"""
判断字符串中是否含有数字
:param password_str:
:return:
"""
for c in password_str:
if c.isnumeric():
return True
return False
def check_letter_exist(password_str):
"""
判断字符串中是否含有字母
:param password_str:
:return:
"""
for c in password_str:
if c.isalpha():
return True
return False
def main():
strength_level = 0
password_str = input('请输入密码8位')
if len(password_str) >= 8:
strength_level += 1
else :
print('要求输入密码大于8位数')
if check_number_exist(password_str):
# print('has_number')
strength_level += 1
else:
print('要求有数字')
if check_letter_exist(password_str):
# print('has letter')
strength_level += 1
else:
print('要求有字母')
if strength_level >= 3:
print('密码强度合格')
else:
print('密码强度不合格')
if __name__ == '__main__':
main()
lesson_2
使用到的另外的知识点 for循环中的 break 语句和 continue 语句
break 终止整个循环
continue 只终止本次循环,而不终止整个循环的执行
如下代码
print('start test for + break')
for i in range(100):
if i % 2 == 0:
break
print(i)
print('end test break')
print('start test for + continue')
for j in range(100):
if j % 2==0:
continue
print(j)
print('end test continue')
实验结果分析:
for break 后没有输出 任何信息 i =0 i%2==0 执行了 break 然后跳出了 for 循环 直接打印 print('end test break')
for continue 后结束本次循环没有打印满足 i%2的 i值 但是打印了 1 3 5 7 ....
lesson_3
本节的代码源码及执行结果:
"""
作者:
功能:判断密码的强弱
版本:v3.0
日期:20190729
v3.0 将密码保存到 文件
"""
def check_number_exist(password_str):
"""
判断字符串中是否含有数字
:param password_str:
:return:
"""
for c in password_str:
if c.isnumeric():
return True
return False
def check_letter_exist(password_str):
"""
判断字符串中是否含有字母
:param password_str:
:return:
"""
for c in password_str:
if c.isalpha():
return True
return False
def main():
strength_level = 0
password_str = input('请输入密码8位')
if len(password_str) >= 8:
strength_level += 1
else :
print('要求输入密码大于8位数')
if check_number_exist(password_str):
# print('has_number')
strength_level += 1
else:
print('要求有数字')
if check_letter_exist(password_str):
# print('has letter')
strength_level += 1
else:
print('要求有字母')
f = open('password_test3.0.txt','a')
f.write('密码:{},强度:{},\n'.format(password_str,strength_level))
f.close()
if strength_level >= 3:
print('密码强度合格')
else:
print('密码强度不合格')
if __name__ == '__main__':
main()
lesson_4
本节代码源码及运行结果:
"""
作者:梁斌
功能:判断密码强度
版本:2.0
2.0新增功能:循环的终止
3.0新增功能:保存密码及强度到文件中
4.0新增功能:读取文件中的密码
日期:09/09/2017
"""
def check_number_exist(password_str):
"""
判断字符串中是否含有数字
"""
has_number = False
for c in password_str:
if c.isnumeric():
has_number = True
break
return has_number
def check_letter_exist(password_str):
"""
判断字符串中是否含有字母
"""
has_letter = False
for c in password_str:
if c.isalpha():
has_letter = True
break
return has_letter
def main():
"""
主函数
"""
# try_times = 5
#
# while try_times > 0:
#
# password = input('请输入密码:')
#
# # 密码强度
# strength_level = 0
#
# # 规则1:密码长度大于8
# if len(password) >= 8:
# strength_level += 1
# else:
# print('密码长度要求至少8位!')
#
# # 规则2:包含数字
# if check_number_exist(password):
# strength_level += 1
# else:
# print('密码要求包含数字!')
#
# # 规则3:包含字母
# if check_letter_exist(password):
# strength_level += 1
# else:
# print('密码要求包含字母!')
#
# f = open('password_3.0.txt', 'a')
# f.write('密码:{}, 强度:{}\n'.format(password, strength_level))
# f.close()
#
# if strength_level == 3:
# print('恭喜!密码强度合格!')
# break
# else:
# print('密码强度不合格!')
# try_times -= 1
#
# print()
#
# if try_times <= 0:
# print('尝试次数过多,密码设置失败!')
# 读取文件
f = open('password_3.0.txt', 'r')
# 1. read()
# content = f.read()
# print(content)
# 2. readline()
# line = f.readline()
# print(line)
# line = f.readline()
# print(line)
# 3. readlines()
for line in f:
print('read: {}'.format(line))
f.close()
if __name__ == '__main__':
main()
lesson_5:
以下是本节的源代码和执行结果:
"""
作者:
功能:判断密码的强弱
版本:v3.0
日期:20190729
v5.0 定义一个password 工具类
"""
class PasswordTool:
"""
密码工具类
"""
def __init__(self,password):
# 类的属性
self.password = password
self.strlength_level = 0
def process_password(self):
# 规则1 密码长度大于 8
if len(self.password) >= 8 :
self.strlength_level += 1
else:
print('要求长度不能小于8')
#规则2 密码包含数字
if self.check_number_exist():
self.strlength_level += 1
else:
print('要求有数字')
#规则3 密码包含字母
if self.check_letter_exist():
self.strlength_level += 1
else:
print('要求有字母')
"""类的方法"""
def check_number_exist(self):
"""判断字符串中含义数字"""
has_number = False
for c in self.password:
if c.isnumeric():
has_number = True
break
return has_number
def check_letter_exist(self):
"""判断字符串中含义数字"""
has_letter = False
for c in self.password:
if c.isalpha():
has_letter = True
return has_letter
def main():
try_time = 2
while try_time > 0 :
password = input('请输入密码8位')
# 实例化密码工具对象
password_toll = PasswordTool(password)
password_toll.process_password()
# f = open('password_test3.0.txt','a')
# f.write('密码:{},强度:{},\n'.format(password_str,strength_level))
# f.close()
if password_toll.strlength_level >= 3:
print('密码强度合格')
break
else:
print('密码强度不合格')
try_time -= 1
if try_time <= 0:
print('尝试次数过多,密码设置失败')
if __name__ == '__main__':
main()
lesson_6
以下是本节的练习源码和执行结果(将 file 函数封装,定义一个文件工具类)
输出结果有两种形式:一种是以文件列表方式 一种是输出全部的内容
"""
作者:
功能:判断密码的强弱
版本:v6.0
2.0新增功能:循环的终止
3.0新增功能:保存密码及强度到文件中
4.0新增功能:读取文件中的密码
5.0新增功能:定义一个password工具类
6.0新增功能:定义一个文件工具类
"""
class PasswordTool:
"""
密码工具类
"""
def __init__(self,password):
# 类的属性
self.password = password
self.strlength_level = 0
def process_password(self):
# 规则1 密码长度大于 8
if len(self.password) >= 8 :
self.strlength_level += 1
else:
print('要求长度不能小于8')
#规则2 密码包含数字
if self.check_number_exist():
self.strlength_level += 1
else:
print('要求有数字')
#规则3 密码包含字母
if self.check_letter_exist():
self.strlength_level += 1
else:
print('要求有字母')
"""类的方法"""
def check_number_exist(self):
"""判断字符串中含义数字"""
has_number = False
for c in self.password:
if c.isnumeric():
has_number = True
break
return has_number
def check_letter_exist(self):
"""判断字符串中含义数字"""
has_letter = False
for c in self.password:
if c.isalpha():
has_letter = True
return has_letter
class FileTool:
# 文件工具类
def __init__(self, filepath):
# 类的属性
self.filepath = filepath
# 类的方法行为
def write_to_file(self,line):
f = open(self.filepath, 'a')
f.write(line)
f.close()
def read_from_file_lines(self):
f = open(self.filepath, 'r')
lines = f.readlines()
f.close()
return lines
def read_from_file(self):
f = open(self.filepath,'r')
line = f.read()
f.close()
return line
def main():
try_time = 2
filepath = 'abc.txt'
neirong = '12346'
#实例化文件工具对象
file_toll = FileTool(filepath)
while try_time > 0 :
password = input('请输入密码8位')
# 实例化密码工具对象
password_toll = PasswordTool(password)
password_toll.process_password()
line = '密码:{} 强度:{} \n '.format(password, password_toll.strlength_level)
# f = open('password_test3.0.txt','a')
# f.write('密码:{},强度:{},\n'.format(password_str,strength_level))
# f.close()
file_toll.write_to_file(line)
if password_toll.strlength_level >= 3:
print('密码强度合格')
break
else:
print('密码强度不合格')
try_time -= 1
if try_time <= 0:
print('尝试次数过多,密码设置失败')
read_lines = file_toll.read_from_file_lines()
print(read_lines)
read = file_toll.read_from_file()
print(read)
if __name__ == '__main__':
main()