前不久在知乎上看到CS61A 和CS61B spring18 开课的消息。上去看了一眼,发现真的不错,所有proj hw都可以本地测试!也就是说除了没有课程成绩和官方讨论区和TA解答外,这个课完全可以上!(还需要FQ看油管)简直棒啊。于是打算寒假刷一波61A 61B 在此也立下flag

 

61A hw01 

Q1: A Plus Abs B

Fill in the blanks in the following function definition for adding a to the absolute value of b, without calling abs.

from operator import add, sub

def a_plus_abs_b(a, b):
    """Return a+abs(b), but without calling abs.

    >>> a_plus_abs_b(2, 3)
    5
    >>> a_plus_abs_b(2, -3)
    5
    """
    if b < 0:
        f = _____
    else:
        f = _____
    return f(a, b)

 

Use Ok to test your code:

python3 ok -q a_plus_abs_b

  第一题就出问题简直好气。实际上python很灵活,我学了C以为赋值只能是值赋值,要么就函数指针,结果这个居然可以f = add 和 f = sub!惊呆了

Q4: If Function vs Statement

 
def if_function(condition, true_result, false_result):
    """Return true_result if condition is a true value, and
    false_result otherwise.

    >>> if_function(True, 2, 3)
    2
    >>> if_function(False, 2, 3)
    3
    >>> if_function(3==2, 3+2, 3-2)
    1
    >>> if_function(3>2, 3+2, 3-2)
    5
    """
    if condition:
        return true_result
    else:
        return false_result
def with_if_statement():
    """
    >>> with_if_statement()
    1
    """
    if c():
        return t()
    else:
        return f()

def with_if_function():
    return if_function(c(), t(), f())

def c():
    "*** YOUR CODE HERE ***"

def t():
    "*** YOUR CODE HERE ***"

def f():
    "*** YOUR CODE HERE ***"

在上面填写代码,让with_if_statement return 1但是with_if_function return 不是1;

这里主要考察两个知识点:1.if-else语句有一句后面不会执行 2.函数调用值传递必须在外面算完值才会传递进去

有了这两条,大家也知道该怎么做了吧