首页 > 其他分享 >CS61A_Lab_05

CS61A_Lab_05

时间:2023-02-19 20:55:39浏览次数:34  
标签:11 seq deck DECK Lab CS61A len 05 fn

Q1

题目描述:

代码实现:

 1 def coords(fn, seq, lower, upper):
 2     """
 3     >>> seq = [-4, -2, 0, 1, 3]
 4     >>> fn = lambda x: x**2
 5     >>> coords(fn, seq, 1, 9)
 6     [[-2, 4], [1, 1], [3, 9]]
 7     """
 8     "*** YOUR CODE HERE ***"
 9     #seq序列中的数字经过函数变化之后要在lower和upper的区间之中,否则就会被舍弃
10     #输出是以list的形式存在的
11     #所以我可以使用recursion
12     if not seq:
13       return []
14     if fn(seq[0])>=lower and fn(seq[0])<=upper:
15       return [[seq[0],fn(seq[0])]]+coords(fn,seq[1:],lower,upper)
16     else:
17       return coords(fn,seq[1:],lower,upper) 
18     #return [[x,f(x)] for x in seq if fn(x)>=lower and fn(x)<=upper]

分析:

别人的实现非常的简洁,以后我也可以这么做。

我的实现好像有漏洞,当list只有一个了的时候,seq[1:]会超出list范围,可能会引起报错。

 

Q2:

题目描述:

代码实现:

 1 def riffle(deck):
 2     """Produces a single, perfect riffle shuffle of DECK, consisting of
 3     DECK[0], DECK[M], DECK[1], DECK[M+1], ... where M is position of the
 4     second half of the deck.  Assume that len(DECK) is even.
 5     >>> riffle([3, 4, 5, 6])
 6     [3, 5, 4, 6]
 7     >>> riffle(range(20))
 8     [0, 10, 1, 11, 2, 12, 3, 13, 4, 14, 5, 15, 6, 16, 7, 17, 8, 18, 9, 19]
 9     """
10     "*** YOUR CODE HERE ***"
11     M=len(deck)//2
12     return [deck[k//2 + M*(k%2)] for k in range(len(deck))] 

分析:

这个代码实现很巧妙。

第一个亮点就是 for k in range(len(deck)) 来进行记数,为后面判断奇偶做好准备。

第二个亮点就是注意到 10 11 12 13…… 其实就是0 1 2 3 加上中间值。用k//2来重复两次,太妙了。

 

标签:11,seq,deck,DECK,Lab,CS61A,len,05,fn
From: https://www.cnblogs.com/xuenima/p/17135559.html

相关文章