集合及其基本运算的实现(无讲解,仅含答案)

部分代码进行了注释,三四关采用了递归的思想进行问题的解决,三四关由网上查找得到(感谢  精灵之子),主要靠大家理解。

第一关 

def readAndPrintUniqueWords(filename):
    infile = open(filename, 'r')
    #**********  Begin  **********#
    #请在此区间内编程完成函数代码
    a=[]
    while True:
        txt=infile.readline()
        if txt=="":
            break
        if txt in a:
            pass 
        else:
            a.append(txt)
            print(txt,end="")
    
    
    #请在此区间内编程完成函数代码
    #**********  End  **********#
    infile.close()

第二关

def shakeSpeare(filename):
    #**********  Begin  **********#
    #请在此区间内编程实现函数功能
    txt=open(filename,"r")
    tx=txt.read()
    reverse=[]
    words=set(tx.strip().split(" "))#用列表进行操作比较慢
    for word in words:
        if (len(word)>4) and (word[::-1] in words):
            reverse.append(word)
            reverse.append(word[::-1])
    reverse=set(reverse)

        
    #请在此区间内编程实现函数功能
    #**********  End  **********#
    return reverse

第三关

def powSet(S):
    #**********  Begin  **********#
    #请在此区域内编程
    
    #创建一个列表,将S中的元素放到a中
    a=[]
    for i in S:
        a.append(i)
    #判断一下a的长度
    #长度为1时,下面进行递归时,要去掉一个元素的操作就不行
    if len(a)==1:
        return {frozenset(),frozenset(a)}
    #创建一个集合
    pset=set()
    #去掉一个元素,构成s-1,进行递归调用
    temp=set()
    for i in range(len(a)):
        S.remove(a[i])
        #创建一个临时集合
        
        for j in powSet(S):
            #powSet(s-1)是powSet(s)的子集
            temp.add(j.union({a[i]}))
        pset=pset.union(powSet(S).union(temp))
        S.add(a[i])
    return pset
        


    #请在此区域内编程
    #**********  End  **********#

第四关

def DescartesProduct(*args):
    import itertools

    #**********  Begin  **********#
    #请在此区域编程实现函数功能
    if (len(args)==2):
        a=set()
        for x in args[0]:
            for y in args[1]:
                if type(x)==tuple:
                    b=list(x)#将序偶类型转化为列表
                    b.append(y)
                    b=tuple(b)
                    a.add(b)
                else:
                    a.add((x,y))
        return a 
    else:
        ori=args[0]
        for x in args[1:]:
            args1=x
            set1=DescartesProduct(ori,args1)
            ori=set1
        return ori


    #请在此区域编程实现函数功能
    #**********  End  **********#

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值