python_集合初识_应用(随机生成不重复的字符串)

 

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

#去重方法:


#list去重操作
# lis1 = [1,2,5,3,1,2,3,6,8]
# lis2 = []
# for i in lis1 :
# if i not in lis2:
# lis2.append(i)
# print(lis2)

##########################

1.集合创建

s = set()#空集合
s = {11,22,33,44}  #注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典
a=set('boy')
b=set(['y', 'b', 'o','o'])
c=set({"k1":'v1','k2':'v2'})
d={'k1','k2','k2'}
e={('k1', 'k2','k2')}
print(a,type(a))
print(b,type(b))
print(c,type(c))
print(d,type(d))
print(e,type(e))

输出:
{'o', 'b', 'y'} <class 'set'>
{'o', 'b', 'y'} <class 'set'>
{'k1', 'k2'} <class 'set'>
{'k1', 'k2'} <class 'set'>
{('k1', 'k2', 'k2')} <class 'set'>

2.集合元素

  增加:

  set1.add(999)

  set1.update([1,2,3])  

  删除:

  s1.remove(777)#删除元素,如果元素不存在会报错
  s1.pop()#删除一个随机的元素,并返回删除的元素
  s1.discard('dddd')#如果删除的元素存在,删除,不存在不做处理

  合并集合:

  print(s1.union(s2))
  print(s1|s2)

  交集:

  print(s1.intersection(s2))
  print(s1&s2)

##########################


#集合的两种方式,一种通过set转化,一种直接定义


lis = [1,2,5,3,1,2,3,6,8]
slist = set(lis)
slist2 = {1,2,3,6}
s = {}#这是空字典,不是集合
s = set()#这是空集合
xn = [1,4,2,7,8]
python = [5,1,2,3,9,4]
s1 = set(xn)
s2 = set(python)
s3 = {1,2}
s4 = {1,2,3,6}
#并集,两种方法
print(s1.union(s2))
print(s1|s2)
#交集,
print(s1.intersection(s2))
print(s1&s2)
print(s1 - s2)#返回s2中有s1中没有的
print(s2 - s1)#返回s1中有s2中没有的
print(s3.issubset(s1))#子集
print(s4.issuperset(s3))#父集
print(s1.isdisjoint(s2))#有交集返回false,没有交集返回TRUE
#差集
print(s1.difference(s2))
#去掉相同元素,保留其他元素
print(s1.symmetric_difference(s2))
print(s1^s2)
#集合也是无序的
#集合不能直接加到集合中,要变为字符串加入集合中
#
s1.add(999)#添加元素
s2.update([1,2,3])
s1.remove(777)#删除元素,如果元素不存在会报错
s1.pop()#删除一个随机的元素,并返回删除的元素
s1.discard('dddd')#如果删除的元素存在,删除,不存在不做处理
#非空即真,非0即真
#if 判断时只要是空的或者是0就走else
#用集合的方式产生随机8的密码,并且确认密码中包含大小写字母和数字,生成后保存至文件中
# import random,string
# num = input('输入次数:').strip()
# lis = []
# pwds = set()
# if num.isdigit() :
# i = 0#while 循环时必须有计数器
# while i<int(num):
# password = set(random.sample(string.ascii_letters+string.digits,8))
# upper_set = set(string.ascii_uppercase)
# lower_set = set(string.ascii_lowercase)
# letter_set = set(string.ascii_letters)
# set1 = password.intersection(upper_set)
# set2 = password.intersection(lower_set)
# set3 = password.intersection(letter_set)
# #判断密码是否即包含大小写字符和数字的方法有如下两种方法:
# # if len(set1)>0 and len(set2)>0 and len(set3)>0:
# # print('密码符合要求')
# # else :
# # print('密码不符合要求')
# if set1 and set2 and set3:
# print('密码符合要求')
# str = ''.join(password)+'\n'
# i = i + 1
# if str not in lis :
# lis.append(str)
#
# fw = open('pwds.txt','w')
# fw.writelines(lis)
# else:
# print('密码不符合要求')
import random,string
num = input('输入次数:').strip()
lis = []
pwds = set()
if num.isdigit() :
while len(pwds)<int(num):
password = set(random.sample(string.ascii_letters+string.digits,8))
upper_set = set(string.ascii_uppercase)
lower_set = set(string.ascii_lowercase)
letter_set = set(string.ascii_letters)
set1 = password.intersection(upper_set)
set2 = password.intersection(lower_set)
set3 = password.intersection(letter_set)
if set1 and set2 and set3:
print('密码符合要求')
str = ''.join(password)+'\n'
pwds.add(str)
fw = open('pwds.txt','w')
fw.writelines(pwds)
else:
print('密码不符合要求')

posted on 2017-10-20 13:05  yezi_396  阅读(2348)  评论(0编辑  收藏  举报

导航