CS61A 002 控制、环境图Discussion 1: Control, Environment Diagrams

243 阅读1分钟

实话实说,CS61A的tex是真长啊,而且这个翻译软件翻译的很硬,所以有些地方看的不太明白;

这次的讨论课,其实还是ch.1.6的延伸,ch1.6里面主要介绍了高阶方法;这里面主要还是讨论方法的frame(翻译成框架,我怎么老是觉得这么翻译不太行),和环境;

  • Jacket Weather

这一题,很简单,判断真假就行;

def wears_jacket_with_if(temp, raining):
    """
    >>> wears_jacket_with_if(90, False)
    False
    >>> wears_jacket_with_if(40, False)
    True
    >>> wears_jacket_with_if(100, True)
    True
    """
    "*** YOUR CODE HERE ***"
    if temp < 60 or raining :
        return True
    else :
        return False
  • Is Prime

这一题,其实就是质数的判断;这一题,不得不说我的代码写的是真难看。首先判断是否为1 ,然后循环判断是否能够整除,如果能够判断被整除,则判断这个值是否和当前值相等,如果相等则返回真,否则返回假;

我一直想把这一行删除if n == i: 这一行删除,但是不太现实;

def is_prime(n):
    """
    >>> is_prime(10)
    False
    >>> is_prime(7)
    True
    >>> is_prime(1) # one is not a prime number!!
    False
    """
    "*** YOUR CODE HERE ***"
    i = 2
    if n == 1:
        return False
    else:
        while n % i :
            i += 1
        if n == i: # 这一行删除
            return True
            
    return False
  • Fizzbuzz

实现Fizzbuzz 序列,我原本的做法是使用穿透跳三个if判断,因为我看到能狗被15整除返回的值,其实就是被3整除,和被5整除的拼接。但是Print是换行的,而且15也会被打印下来,所以这个是错误的;

def fizzbuzz(n):
i = 1
    while i <= n:
        if i % 3 == 0:
            print('fizz')
        if i % 5 == 0:
            print('buzz')
        if (i % 3 == 0 or i % 5 !=0) or (i % 5 == 0 or i % 3 !=0):
            print(i)
        i += 1 

正确做法就是分三种情况判断,把三种情况排除的就是需要打印的值;

def fizzbuzz(n):
    """
    >>> result = fizzbuzz(16)
    1
    2
    fizz
    4
    buzz
    fizz
    7
    8
    fizz
    buzz
    11
    fizz
    13
    14
    fizzbuzz
    16
    >>> result is None  # No return value
    True
    """
    "*** YOUR CODE HERE ***"
    i = 1
    while i <= n:
        if i % 15 == 0:
            print('fizzbuzz')
        elif i % 5 == 0 :
            print('buzz')
        elif i % 3 == 0 :
            print('fizz')
        else :
            print(i)
        i += 1