[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. Linux之如何配置IPV6网络

    配置IPV6地址小笔记 #例题: 1)为server添加一个IPv6地址fd00:ba5e:ba11:10::10/64: 2)为client添加一个IPv6地址fd00:ba5e:ba11:10:: ...

  2. 如何充分利用KingbaseES日志

    作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...

  3. 【设计模式】Java设计模式 - 桥接模式

    [设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...

  4. HBase原理深入

    HBase 读写数据流程 Hbase 读数据流程 首先从 zk 找到 meta 表的 region 位置,然后读取 meta 表中的数据,meta 表中存储了用户表的 region 信息 根据要查询的 ...

  5. ElasticSearch介绍和基本用法(一)

    ElasticSearch 引言 1.在海量数据中执行搜索功能时,如果使用MySQL, 效率太低. 2.如果关键字输入的不准确,一样可以搜索到想要的数据. 3.将搜索关键字,以红色的字体展示. 介绍: ...

  6. SQL语句中过滤条件放在on和where子句中的区别和联系

    摘要: 介绍在多表关联SQL语句中,过滤条件放在on和where子句中的区别--inner join中没区别,外连接就不一样. 综述   蚂蚁金服的一道SQL面试题如下:SQL语句中,过滤条件放在on ...

  7. 安装 CRI 客户端 crictl

    # https://github.com/kubernetes-sigs/cri-tools/releases/ 选择版本 wget https://github.com/kubernetes-sig ...

  8. 第一个Django应用 - 第三部分:Django视图和模板

    一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模板.例如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...

  9. NSIS皮肤插件:vcl-styles-plugins

    vcl-styles-plugins简介   NSISVCLStyles  plugin (dll)是一款应用于nsis安装程序的皮肤插件,插件大小约为1.6MB,实际应用在安装程序中压缩后约为550 ...

  10. 一个C#开发者学习SpringCloud搭建微服务的心路历程

    前言 Spring Cloud很火,很多文章都有介绍如何使用,但对于我这种初学者,我需要从创建项目开始学起,所以这些文章对于我的启蒙,帮助不大,所以只好自己写一篇文章,用于备忘. SpringClou ...