中级农民
- 积分
- 104
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-12-10
- 最后登录
- 1970-1-1
|
hw04 (没做extra question)
- HW_SOURCE_FILE = 'hw04.py'
- ###############
- # Questions #
- ###############
- def intersection(st, ave):
- """Represent an intersection using the Cantor pairing function."""
- return (st+ave)*(st+ave+1)//2 + ave
- def street(inter):
- return w(inter) - avenue(inter)
- def avenue(inter):
- return inter - (w(inter) ** 2 + w(inter)) // 2
- w = lambda z: int(((8*z+1)**0.5-1)/2)
- def taxicab(a, b):
- """Return the taxicab distance between two intersections.
- >>> times_square = intersection(46, 7)
- >>> ess_a_bagel = intersection(51, 3)
- >>> taxicab(times_square, ess_a_bagel)
- 9
- >>> taxicab(ess_a_bagel, times_square)
- 9
- """
- "*** YOUR CODE HERE ***"
- return abs(street(a) - street(b)) + abs(avenue(a) - avenue(b))
- def squares(s):
- """Returns a new list containing square roots of the elements of the
- original list that are perfect squares.
- >>> seq = [8, 49, 8, 9, 2, 1, 100, 102]
- >>> squares(seq)
- [7, 3, 1, 10]
- >>> seq = [500, 30]
- >>> squares(seq)
- []
- """
- "*** YOUR CODE HERE ***"
- ls = []
- for ele in s:
- ls += [ i for i in range(1,ele//2+2) if i*i==ele]
- return ls
-
- def g(n):
- """Return the value of G(n), computed recursively.
- >>> g(1)
- 1
- >>> g(2)
- 2
- >>> g(3)
- 3
- >>> g(4)
- 10
- >>> g(5)
- 22
- >>> from construct_check import check
- >>> check(HW_SOURCE_FILE, 'g', ['While', 'For'])
- True
- """
- "*** YOUR CODE HERE ***"
- if n <=3:
- return n
- else:
- return g(n-1)+2*g(n-2)+3*g(n-3)
- def g_iter(n):
- """Return the value of G(n), computed iteratively.
- >>> g_iter(1)
- 1
- >>> g_iter(2)
- 2
- >>> g_iter(3)
- 3
- >>> g_iter(4)
- 10
- >>> g_iter(5)
- 22
- >>> from construct_check import check
- >>> check(HW_SOURCE_FILE, 'g_iter', ['Recursion'])
- True
- """
- "*** YOUR CODE HERE ***"
- bs1,bs2,bs3 = 1,2,3
- gcase = 4
- total = 0
- if n ==1:
- return bs1
- elif n ==2:
- return bs2
- elif n ==3:
- return bs3
- else:
- while gcase <=n:
- new = 3*bs1+2*bs2+bs3
- bs1,bs2,bs3 = bs2,bs3,new
- gcase +=1
- return new
-
- def pingpong(n):
- """Return the nth element of the ping-pong sequence.
- >>> pingpong(7)
- 7
- >>> pingpong(8)
- 6
- >>> pingpong(15)
- 1
- >>> pingpong(21)
- -1
- >>> pingpong(22)
- 0
- >>> pingpong(30)
- 6
- >>> pingpong(68)
- 2
- >>> pingpong(69)
- 1
- >>> pingpong(70)
- 0
- >>> pingpong(71)
- 1
- >>> pingpong(72)
- 0
- >>> pingpong(100)
- 2
- >>> from construct_check import check
- >>> check(HW_SOURCE_FILE, 'pingpong', ['Assign', 'AugAssign'])
- True
- """
- "*** YOUR CODE HERE ***"
- def at_seven(k):
- if k == 0 :
- return False
- elif k%7==0 or has_seven(k):
- return True
- else:
- return False
- def change_sw(sw):
- return -sw
- def sum_up(n,sw):
- if n == 1:
- return 1
- elif n ==2:
- return sum_up(1,sw)+sw
- elif at_seven(n-1):
- return sum_up(n-1,change_sw(sw))+sw
- else:
- return sum_up(n-1,sw)+sw
-
- if len([i for i in range(1,n+1) if at_seven(i-1)])%2==0: #如果有双数个变方向的点
- return sum_up(n,1) #第n个前面的符号是+
- else:
- return sum_up(n,-1)
-
- def has_seven(k):
- """Returns True if at least one of the digits of k is a 7, False otherwise.
- >>> has_seven(3)
- False
- >>> has_seven(7)
- True
- >>> has_seven(2734)
- True
- >>> has_seven(2634)
- False
- >>> has_seven(734)
- True
- >>> has_seven(7777)
- True
- """
- if k % 10 == 7:
- return True
- elif k < 10:
- return False
- else:
- return has_seven(k // 10)
- def count_change(amount):
- """Return the number of ways to make change for amount.
- >>> count_change(7)
- 6
- >>> count_change(10)
- 14
- >>> count_change(20)
- 60
- >>> count_change(100)
- 9828
- """
- "*** YOUR CODE HERE ***"
- i = 0
- coin_ls = []
- while pow(2,i)<=amount:
- coin_ls += [pow(2,i)]
- i +=1
- def partition(n,coin):
- if n <= 0 :
- return 0
- elif n == 1:
- return 1
- elif n ==coin:#2+0+8这种情况
- return 1+partition(n,coin//2)
- elif coin not in coin_ls:
- return 0
- else:
- return partition(n-coin,coin)+partition(n,coin//2)
- return partition(amount,coin_ls[-1])
- ###################
- # Extra Questions #
- ###################
- from operator import sub, mul
- def make_anonymous_factorial():
- """Return the value of an expression that computes factorial.
- >>> make_anonymous_factorial()(5)
- 120
- >>> from construct_check import check
- >>> check(HW_SOURCE_FILE, 'make_anonymous_factorial', ['Assign', 'AugAssign', 'FunctionDef', 'Recursion'])
- True
- """
- return 'YOUR_EXPRESSION_HERE'
复制代码 |
|