PYTHON第二次实验
实验2.1 批量生成姓名、家庭住址、电子邮箱等随机信息
一、实验目的
- 熟练运用标准库random中的函数
- 了解标准库string中的字符串常量
- 了解汉字编码格式
- 熟练掌握文本文件的操作方法
- 在文件操作时养成使用上下文管理语句with的习惯
二、实验内容
编写程序,生成200个人的模拟信息,包括姓名、性别、年龄、电话号码、家庭住址、电子邮箱地址,把生成的信息写入文本文件,每行存放一个人的信息,最后再读取生成的文本文件并输出其中的信息。
三、实验步骤
1.随机生成姓名
有关choice()函数的用法:(43条消息) Python choice() 函数_沉默的鹏先生-CSDN博客
(1)首先查找百家姓:
赵钱孙李,周吴郑王。冯陈褚卫,蒋沈韩杨。朱秦尤许,何吕施张。
孔曹严华,金魏陶姜。戚谢邹喻,柏水窦章。云苏潘葛,奚范彭郎。
(2)名字:
秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽
随机从姓氏中抽取一个与名字中随机抽取一个组成名字即可:
def name():
#随机生成姓名
firstname = list('赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎')
#百家姓
girl_name=list('秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽')
first=random.choice(firstname)
second=random.choice(girl_name)
name=first+second
return name
2.随机生成性别
def get_sex():
#随机生成性别
sex='女男'
a=random.choice(sex)
return a
3.随机生成年龄
随机生成任意范围的整数有两种方法:
(1)用random库中的sample()函数:
index = random.sample(range(a,b),n)
(2)用numpy库中的random.randint()函数:
index = np.random.randint(a,b,size=n)
博客上有介绍:(43条消息) python生成随机整数_weixin_30361753的博客-CSDN博客
(43条消息) python中生成随机整数(random模块)_x1131230123的博客-CSDN博客_python生成随机整数
4.随机生成电话号码
有一个不错的博客:
(43条消息) 使用python随机函数随机批量生成手机号和姓名_Ysuzuran的博客-CSDN博客
如果还想做的更好一点可以参考这篇博客:
(43条消息) Python随机生成电话号码&号码段分析_caoxinjian423的博客-CSDN博客
字典后面加方括号的意思(其实就是取键值,是字典的基础操作啦):
(44条消息) pyhon字典后跟中括号_jacke121的专栏-CSDN博客
def phone_number():
#随机生成电话号码
first='1'
second=random.choice('34578')
third=str(
{
'3': random.randint(0, 9), # 从0-9之间随机生成一个整数int类型
'4': random.choice([5, 7, 9]),
'5': random.choice([0, 1, 2, 3, 4, 5, 7, 8]),
'7': random.choice([2, 3, 5, 6, 7, 8]),
'8': random.randint(0, 9),
}[second])#取second所对应的键值
last=str(random.randint(9999999,10000000))
number=int(first+second+third+last)
return number
5.随机生成家庭住址
def address():
#随即生成家庭住址
all_address=['北京市海淀区','上海市静安区','北京市朝阳区','广州市海珠区','广州市天河区','深圳市南山区','上海市黄浦区','上海市徐汇区','上海市长宁区','上海市虹口区']
get_add=random.choice(all_address)
return get_add
6.随机生成电子邮箱
def mail(number):
#随即生成电子邮箱
houzhui=['@qq.com','@gmail.com','@163.com','@126.com']#邮箱后缀
mail_add=str(number)+random.choice(houzhui)
return mail_add
7.写入文本文件
在测试的时候,出现编码相关的警告信息:
(44条消息) File was loaded in the wrong encoding:‘UTF-8‘报错解决_a_liang123的博客-CSDN博客
关于UTF-8、GBK:(44条消息) UTF-8和GBK有什么区别?到底用哪个好?_sidiansh的专栏-CSDN博客
怎么写入文件:
(参考的)
with open("douban.txt","w") as f:
f.write("这是个测试!")
with open("个人信息.txt", "w") as f:
for i in range(a):
f.write(str(all_people[i]))
f.write('\n')
8.读取文本文件
读写操作的介绍:
(44条消息) Python使用with open() as读写文件【必知必会】_路虽远,行则必至!-CSDN博客
with open('个人信息.txt','r') as f:
for line in f:
print(line)
9.其他内容补充:
有关python的主函数:
[(44条消息) python main()函数_skdgyf的博客-CSDN博客](https://blog.csdn.net/skdgyf/article/details/78759730?ops_request_misc=&request_id=&biz_id=102&utm_term=python main()&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-78759730.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187)
import random
import string
'''
随机生成:姓名,性别,年龄,电话,住址,邮箱
写入文本
读取文本并输出
'''
def name():
#随机生成姓名
firstname = list('赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎')
#百家姓
girl_name=list('秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽')
first=random.choice(firstname)
second=random.choice(girl_name)
name=first+second
return name
def get_sex():
#随机生成性别
sex='女男'
a=random.choice(sex)
return a
def phone_number():
#随机生成电话号码
first='1'
second=random.choice('34578')
third=str(
{
'3': random.randint(0, 9), # 从0-9之间随机生成一个整数int类型
'4': random.choice([5, 7, 9]),
'5': random.choice([0, 1, 2, 3, 4, 5, 7, 8]),
'7': random.choice([2, 3, 5, 6, 7, 8]),
'8': random.randint(0, 9),
}[second])#取second所对应的键值
last=str(random.randint(9999999,100000000))
number=int(first+second+third+last)
return number
def address():
#随机生成家庭住址
all_address = ['北京市海淀区', '上海市静安区', '北京市朝阳区', '广州市海珠区', '广州市天河区', '深圳市南山区', '上海市黄浦区', '上海市徐汇区', '上海市长宁区', '上海市虹口区']
get_add = random.choice(all_address)
return get_add
def mail(number):
#随即生成电子邮箱
houzhui=['@qq.com','@gmail.com','@163.com','@126.com']#邮箱后缀
mail_add=str(number)+random.choice(houzhui)
return mail_add
a = int(input('请输入一个数字:'))
all_people = []
for i in range(a):
people = []
aname = name()
asex = get_sex()
aphone_number = phone_number()
aaddress = address()
amail = mail(aphone_number)
people.append(aname)
people.append(asex)
people.append(aphone_number)
people.append(aaddress)
people.append(amail)
all_people.append(people)
with open("个人信息.txt", "w") as f:
for i in range(a):
f.write(str(all_people[i]))
f.write('\n')
with open('个人信息.txt','r') as f:
for line in f:
print(line)
实验2.2 检测密码安全强度
一、 实验目的
- 了解标准库中string中的常量。
- 理解密码安全强度的概念。
- 熟练运行逻辑运算符and,并理解惰性求值的特点。
- 熟练运行字典结构
二、 实验内容
一般地,可以作为密码字符的主要有数字、小写字母、大小字母和几个标点符号。密码安全强度主要和字符串的复杂程度有关系,字符串中包含的字符种类越多,认为其安全强度越高。按照这个标准可以把安全强度等级分为强密码、中高、中低、弱密码。其中强密码表示字符串中同时含有数字、小写字母、大写字母、标点符号这四类字符,而弱密码表示字符串中仅包含4类字符串中的一种。
编写程序,输入字符串,输出字符串作为密码时的安全强度。
三、实验步骤
有关python3中标准库string的使用:
(45条消息) Python 标准库笔记:string模块_github_36601823的博客-CSDN博客_python string库
有一个我觉得讲的比较好的:
(45条消息) Python3关于String模块(import string)_YUAYU博客-CSDN博客_python3 string模块
有一个官方的文档教程:
dir()函数:
[(45条消息) python dir()函数使用_dreamzuora的博客-CSDN博客_python中dir函数用法](https://blog.csdn.net/dreamzuora/article/details/88667524?ops_request_misc=&request_id=&biz_id=102&utm_term=python dir函数&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-6-88667524.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187)
isdecimal():判断给定字符串是否全为数字
isupper():判断给定的字符串是否全为大写
islower():判断给定的字符串是否全为小写
string.punctuation:找出字符串中的所有的标点(针对英文)
password=input('请输入一串密码:')
score=[0,0,0,0]
for i in password:
if i.isdecimal():
score[0]=1
elif i.islower():
score[1]=1
elif i.isupper():
score[2]=1
elif i in string.punctuation:
score[3]=1
sumall=sum(score)
if sumall==1:
print('弱密码')
elif sumall==2:
print('中低密码')
elif sumall==3:
print('中高密码')
elif sumall==4:
print('强密码')