大家好,本篇博客目的是建立存储和查询用户名和密码的python系统,基础好的可跳过中间小干货,源码在末尾,喜欢的留下小赞哦!
主要功能如下:
若用户选择1,则应输入需创建的新用户ID。检查用户ID是否已经存在系统中。如果用户已存在,则要求重新选择另一个用户名(User ID)。输入适当的用户名(User ID)后,应要求输入密码。密码满足以下任何一个条件得1分:
至少应包含8个字符;
应包括大写字母;
应包含小写字母;
应该包括数字;和
应至少包含一个特殊字符,例如!, $, %, ^, &, *, (, ), ?, @, #
如果用户输入的密码得分score<=2,则应拒绝并提示它是弱密码;
如果得分为2<=score<=4,请告诉他们“可以改进此密码” ,并询问用户是否想加强密码。
如果score=5,强密码,设置成功。将此用户ID和密码添加到.csv文件中。
如果他们从菜单中选择2,则输入用户ID以及密码,检查是否为系统用户并原密码正确,则允许用户更改密码并保存更改到.csv文件。
如果用户从菜单中选择3,则显示所有用户ID,但不显示密码。
如果用户从菜单中选择4,则新建CSV文件存储数据。
如果用户从菜单中选择5,则停止并退出该程序。
如果用户没有在第一个菜单上选择相关选项,应该显示适当的提示消息。
这里列举一些本人查阅的相关资源,省去大家搜寻资源的时间。
# 打印功能提示
def printMenu():
print("************************")
print("1.创建一个用户ID")
print("2.修改密码")
print("3.显示所有用户")
print("4.创建一个新的CSV文件记录数据")
print("5.退出系统")
print("************************")
# 创建用户ID及密码
def CreateUserID():
global NewID
global PassWord
path = "aa.csv" #通过CreateCsvFile()函数提前创建
NewID = input('请输入你想创建的用户名:')
data=pd.read_csv(path,sep=',',encoding='utf-8') #encoding='unicode_escape' 'utf-8' 'GBK'注意区分这几种编码格式
a=data['UserID'].tolist() #将此列转换成列表
while True:
if NewID in a:
print("用户名已存在,请重新选择\n")
NewID = input('请重新输入你想创建的用户名:')
else:
PassWord = ScorePassword()
#a+:追加模式,将新用户名和密码追加到文件末尾
with open(path,'a+',newline="") as f: #使用csv包操作文件,若出现空行,则应加上newline=""参数
csv_write = csv.writer(f)
data_row = [NewID,PassWord]
csv_write.writerow(data_row)
break
#密码评分
def ScorePassword():
yourpassword = input("请你为该用户设置密码:")
strength_level = 0
if len(yourpassword) >= 8: #字符串长度至少为8
strength_level += 1
if len(yourpassword) >= 8:
strength_level += 1
upper = re.compile('[A-Z]+')
match = upper.findall(yourpassword) #findall函数查询参数是否存在大写
if match:
strength_level += 1
lower = re.compile('[a-z]+')
match = lower.findall(yourpassword) #findall函数查询参数是否存在小写
if match:
strength_level += 1
num = re.compile('[0-9]+') #findall函数查询参数是否存在数字
match = num.findall(yourpassword)
if match:
strength_level += 1
else:
print('密码设置失败,至少含有8位')
ScorePassword()
symbol = re.compile('([^a-zA-Z0-9])+') #findall函数查询参数是否存在特殊字符
match = symbol.findall(yourpassword)
if match:
strength_level += 1
else:
strength_level = 0
print('应至少含有一个特殊字符')
ScorePassword()
if strength_level <= 2:
print('密码设置简单,请重试')
ScorePassword() #这里可以采用其它方式,我采用的是递归的方法重试
elif strength_level <=4:
if input('密码中等强度可使用,是否设置更强密码?(Please input Yes or no)\n') != 'Yes':
print("恭喜你设置成功\n")
return yourpassword
else:
ScorePassword(input("请你输入更强的密码:"))
elif strength_level == 5:
print('恭喜你设置成功,完美密码!\n')
return yourpassword
方式众多,但是原理大致相同,我再列举几种,大家可供参考、修改,有疑问可以留言,看到必回。
Python字符串:
def checkio(s):
fs = ''.join(filter(str.isalnum, s)) # keep only letters and digits
return (
len(fs) >= 1 # There is at least one letter or digit
and len(s) >= 10 # ... and there are at least 10 characters
and not fs.isalpha() # ... and there is at least one digit
and not fs.isdigit() # ... and there is at least one letter
and not fs.islower() # ... and not all letters are lowercase
and not fs.isupper() # ... and not all letters are uppercase
)
import re
def checkio(data):
return True if re.search("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$", data) and len(data) >= 10 else False
if __name__ == '__main__':
# 修改用户密码
def ChangeUserPassword():
path = "aa.csv"
YourID = input('请输入你想修改密码的用户名:') #
YourPassword = input('请输入原密码:')
r = csv.reader(open(path,newline=""))
lines = [l for l in r] #将读取的数据转换成列表
# print(lines.index([YourID,YourPassword]))
NewIndes = lines.index([YourID,YourPassword]) #列表查找特定的值
lines[NewIndes][1] = ScorePassword() #列表索引处修改其值
# print(lines)
writer = csv.writer(open(path, 'w',newline="")) #将修改后的数据重新输入进去csv文件
writer.writerows(lines)
#显示当前所有用户信息
def SelectAllUserInfo():
path = "aa.csv"
with open(path,"r+",encoding='utf-8') as f:
csv_read = csv.reader(f)
for line in csv_read:
print(line[0])
print("\n")
import csv
import re
import pandas as pd
import numpy as np
from pandas.core.frame import DataFrame
global NewID
global PassWord
# 打印功能提示
def printMenu():
print("************************")
print("1.创建一个用户ID")
print("2.修改密码")
print("3.显示所有用户")
print("4.创建一个新的CSV文件记录数据")
print("5.退出系统")
print("************************")
#打开一个csv文件,若没有则创建,用于存储用户id和密码
def CreateCsvFile():
path = input("请输入新csv文件名——用于记录数据")
with open(path,'w+',newline="") as f:
csv_write = csv.writer(f)
csv_head = ['UserID','PassWord']
csv_write.writerow(csv_head)
# 创建用户ID及密码
def CreateUserID():
global NewID
global PassWord
path = "aa.csv"
NewID = input('请输入你想创建的用户名:')
data=pd.read_csv(path,sep=',',encoding='utf-8') #encoding='unicode_escape' 'utf-8' 'GBK'注意区分这几种编码格式
a=data['UserID'].tolist()
while True:
if NewID in a:
print("用户名已存在,请重新选择\n")
NewID = input('请重新输入你想创建的用户名:')
else:
PassWord = ScorePassword()
with open(path,'a+',newline="") as f:
csv_write = csv.writer(f)
data_row = [NewID,PassWord]
csv_write.writerow(data_row)
break
#密码评分
def ScorePassword():
yourpassword = input("请你为该用户设置密码:")
strength_level = 0
if len(yourpassword) >= 8:
strength_level += 1
if len(yourpassword) >= 8:
strength_level += 1
upper = re.compile('[A-Z]+')
match = upper.findall(yourpassword)
if match:
strength_level += 1
lower = re.compile('[a-z]+')
match = lower.findall(yourpassword)
if match:
strength_level += 1
num = re.compile('[0-9]+')
match = num.findall(yourpassword)
if match:
strength_level += 1
else:
print('密码设置失败,至少含有8位')
ScorePassword()
symbol = re.compile('([^a-zA-Z0-9])+')
match = symbol.findall(yourpassword)
if match:
strength_level += 1
else:
strength_level = 0
print('应至少含有一个特殊字符')
ScorePassword()
if strength_level <= 2:
print('密码设置简单,请重试')
ScorePassword()
elif strength_level <=4:
if input('密码中等强度可使用,是否设置更强密码?(Please input Yes or no)\n') != 'Yes':
print("恭喜你设置成功\n")
return yourpassword
else:
ScorePassword(input("请你输入更强的密码:"))
elif strength_level == 5:
print('恭喜你设置成功,完美密码!\n')
return yourpassword
# 修改用户密码
def ChangeUserPassword():
path = "aa.csv"
YourID = input('请输入你想修改密码的用户名:') #
YourPassword = input('请输入原密码:')
r = csv.reader(open(path,newline=""))
lines = [l for l in r]
# print(lines.index([YourID,YourPassword]))
NewIndes = lines.index([YourID,YourPassword])
lines[NewIndes][1] = ScorePassword()
# print(lines)
writer = csv.writer(open(path, 'w',newline=""))
writer.writerows(lines)
# 显示当前所有用户信息
def SelectAllUserInfo():
path = "aa.csv"
with open(path,"r+",encoding='utf-8') as f:
csv_read = csv.reader(f)
for line in csv_read:
print(line[0])
print("\n")
while True:
printMenu()
key = input("Enter selection:")
print("\n")
if key == '1':
CreateUserID()
elif key == '2':
ChangeUserPassword()
elif key == "3":
SelectAllUserInfo()
elif key == "4":
CreateCsvFile()
elif key == "5":
break
else:
print("请输入1-5选项\n")