[CS61A] Lecture 1&2&3. Introduction&Functions&Control

前言

CS61A是加州大学伯克利分校一门计算机专业课程,用于指导大一新生入门计算机科学这一门学科,这门课程以《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,SICP)这一计算机领域经典书籍为教纲,由浅入深详细地介绍了计算机程序的本质,并系统性地说明该如何编写一个健壮且易于维护的程序。不过,SCIP一书以Lisp的方言Scheme作为教学编程语言,由于Scheme过于小众化,CS61A以现今更为更为流行的Python作为教学编程语言,部分教纲略有变更。

CS61A包含了近四十节课,课程内容涵盖了编程语言的方方面面,每节课包含了lecture、discussion、lab、office hours、tutoring、textbook几部分,此外还包含了多个用来练手的homework和project。虽然CS61A是大一新生的计算机入门课程,已在计算机领域工作多年的职员依然可以学习这门课程,并从中学习到相当可观的知识。实际上,最初的SICP公开课的面相对象本就是惠普公司的员工。接下来,我将不定时总结观看CS61A网课视频中所获取的知识,并写在随笔中,以此温故而知新。

Lecture

Lecture 1. Introduction

CS61A的第一节课主要是做了些基本的介绍:

  • 三名课程讲师:Richard Roggenkemper、Laryn Qi、Cooper Bedin
  • 计算机科学的基本概念:计算什么问题?如何解决问题?现实中的应用?
  • CS61A介绍:一门用来控制编程复杂度(掌握抽象与编程范式)的课程

Lecture 2. Functions

CS61A第二节课的主题是函数(Functions),本节课首先从数学中的表达式(函数、平方、根号、加号、除号。。。)作为切入点,介绍了编程语言的基本概念:表达式,说明了表达式的结构、执行、复杂表达式的执行顺序等等。

其次介绍了赋值语句,赋值语句的本质是绑定,将一个值用一个符号绑定起来,随后便可以使用该符号表示对应的值。

接着介绍了函数,函数用来定义一段过程,其包含了一个或多个表达式,在定义一个函数后,便可以通过表达式执行它。

最后,讲师介绍了作用域的概念,每一个变量都拥有它的作用域,要么在全局作用域中,要么在函数或其他自定义的作用域中。解释器在搜索变量所绑定的值时,首先会搜索当前作用域,若搜索不到则会在上层作用域中搜索,直至全局作用域。

Q&A:作用域是什么?

Lecture 3. Control

CS61A第三节课的主题是流程控制(Control),大体包括如下内容:

  • print和None:介绍了在Python中print函数以及None的用法。
  • 纯函数与非纯函数:纯函数指除不对其他作用域作任何更改的函数,不为纯函数的函数则为非纯函数。这里的更改指外部变量的更改以及外部环境的变化等,例如:在函数中修改了一个外部变量a的值、print打印字符串等。
  • 函数的生命周期:函数定义和执行的过程。
  • 流程控制:if、elif、else、while
  • 课堂练习:输入一个正整数,找出该数因式分解得出的最长序列。例如:输入12,输出2、2、3;输入858,输出2、3、11、13。

Q&A:纯函数的理解?

Homework

CS61A的第一份作业:https://cs61a.org/hw/hw01/ ,Variables and Functions, Control,其中包含了四道题目。

Q1: A Plus Abs B

题目:输入两个自然数a和b,要求输出a与b的绝对值的和,即a+abs(b),注意不能使用内置库。

代码:

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
>>> a_plus_abs_b(-1, 4)
3
>>> a_plus_abs_b(-1, -4)
3
"""
if b < 0:
f = sub
else:
f = add
return f(a, b)

Q2: Two of Three

题目:输入三个正数i、j、k,输出其中较小的两个数的平方和,注意函数体只允许一行代码。

代码:

def two_of_three(i, j, k):
"""Return m*m + n*n, where m and n are the two smallest members of the
positive numbers i, j, and k. >>> two_of_three(1, 2, 3)
5
>>> two_of_three(5, 3, 1)
10
>>> two_of_three(10, 2, 8)
68
>>> two_of_three(5, 5, 5)
50
"""
return i*i+j*j+k*k-max(i, j, k)*max(i, j, k)

Q3: Largest Factor

题目:输入一个正整数n,要求输出比n小且能被n整除的最大的数。

代码:

def largest_factor(n):
"""Return the largest factor of n that is smaller than n. >>> largest_factor(15) # factors are 1, 3, 5
5
>>> largest_factor(80) # factors are 1, 2, 4, 5, 8, 10, 16, 20, 40
40
>>> largest_factor(13) # factor is 1 since 13 is prime
1
"""
"*** YOUR CODE HERE ***"
res = n//2
while n % res != 0:
res -= 1
return res

Q4: Hailstone

题目:输入一个正整数n,给定如下计算过程:如果n是偶数,那么将n除以2;如果n是奇数,那么将n乘3并加1;如此往复直至n为1。现要求每次执行该计算过程时都将n的值打印在屏幕上,且返回计算的次数。

代码:

def hailstone(n):
"""Print the hailstone sequence starting at n and return its
length. >>> a = hailstone(10)
10
5
16
8
4
2
1
>>> a
7
>>> b = hailstone(1)
1
>>> b
1
"""
"*** YOUR CODE HERE ***"
print(n)
if n == 1:
return 1
return 1+hailstone(n//2 if n % 2 == 0 else n*3+1)

参考资料

2020年秋CS61A网课视频:https://www.bilibili.com/video/BV1s3411G7yM

SICP公开课:https://www.bilibili.com/video/BV1Xx41117tr

CS61A官网:https://cs61a.org/

CS61A指导资料(来自于伯克利的一名学生):https://cs61a.vanshaj.dev/

[CS61A] Lecture 1&2&3. Introduction&Functions&Control的更多相关文章

  1. [CS61A] Lecture 5&6&7. Environments & Design & Functions Examples & Homework 2: Higher Order Functions

    [CS61A] Lecture 5&6&7. Environments & Design & Functions Examples & Homework 2: ...

  2. [CS61A] Lecture 4. Higher-Order Functions & Project 1: The Game of Hog

    [CS61A] Lecture 4. Higher-Order Functions & Project 1: The Game of Hog Lecture Lecture 4. Higher ...

  3. INTRODUCTION TO BIOINFORMATICS

    INTRODUCTION TO BIOINFORMATICS      这套教程源自Youtube,算得上比较完整的生物信息学领域的视频教程,授课内容完整清晰,专题化的讲座形式,细节讲解比国内的京师大 ...

  4. Copy Control settings

    Copy Control settings     Skip to end of metadata   Created by Rajesh Banka, last modified by Jyoti ...

  5. ImageBox Control with Zoom/Pan Capability

    Download source files - 10.8 Kb Download demo project - 6.81 Kb Introduction This control extends th ...

  6. 深入理解typescript的Functions

    Functions Introduction # Functions are the fundamental building block of any application in JavaScri ...

  7. 南京大学 静态软件分析(static program analyzes)-- introduction 学习笔记

    一.Programming Languages体系 静态程序分析是编程语言中应用层面下的一个细分领域,它是一个非常重要的核心内容. 在理论部分,考虑的是如何设计一个语言的语法和语义,如何设计语言的类型 ...

  8. (转)Awesome Courses

    Awesome Courses  Introduction There is a lot of hidden treasure lying within university pages scatte ...

  9. [C2P3] Andrew Ng - Machine Learning

    ##Advice for Applying Machine Learning Applying machine learning in practice is not always straightf ...

随机推荐

  1. 【Java】学习路径30-可变参数 Variable Parameter

    定义一个add函数,要求其功能:传入任意数量的参数然后返回相加的结果. public class VariableParameter { public static void main(String[ ...

  2. Android Notification使用

    一 Notification的类别 1.状态栏和抽屉式通知 //获取NotificationManager对象 val notificationManager = getSystemService(N ...

  3. Dubbo源码(九) - 服务调用过程

    1. 前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 源码分析均基于官方Demo,路径:dubbo/dubbo-demo 如果没有看过之前Dub ...

  4. [MRCTF2020]Ez_bypass WP

    首先打开页面 他提示说f12里面有东西,于是直接ctrl+u 查看源代码 I put something in F12 for you include 'flag.php'; $flag='MRCTF ...

  5. Elasticsearch:Smart Chinese Analysis plugin

    Smart Chinese Analysis插件将Lucene的Smart Chinese分析模块集成到Elasticsearch中,用于分析中文或中英文混合文本. 支持的分析器在大型训练语料库上使用 ...

  6. 安装skywalking(测试使用)

    官方下载地址:https://skywalking.apache.org/downloads/ 需要: JDK8到JDK12已测试,其他版本未测试. # 在线安装jdk8 rpm -ivh https ...

  7. Jenkins忘记管理员密码怎么办

    一.admin密码未更改情况 1.进入/root/.jenkins/secrets/目录,打开initialAdminPassword文件,复制密码: 2.访问Jenkins页面,输入管理员admin ...

  8. 【前端必会】tapable、hook,webpack的灵魂

    背景 什么是tapable.hook,平时做vue开发时的webpack 配置一直都没弄懂,你也有这种情况吗? 还是看源码,闲来无聊又看一下webpack的源码,看看能否找到一些宝藏 tapable和 ...

  9. 2022.9.10-2022.9.12 Java第一次课总结

    本节课中的问题总结如下: 1.Java的基本运行单位是类还是方法? 答:Java的基本运行单位是类. 2.类由什么组成? 答:类由变量/方法/属性/事件等部分组成,其中方法就是我们所熟悉的函数,属性即 ...

  10. numpy中的一些常用的关键字用法

    1.np.full() 原型:numpy.full(shape, fill_value, dtype=None, order='C') eg: 2.np.flatten():该函数返回一个折叠成一维的 ...