部分代码进行了注释,三四关采用了递归的思想进行问题的解决,三四关由网上查找得到(感谢 精灵之子),主要靠大家理解。
第一关
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 **********#