[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. 开源IPTV源服务程序使用教程

    Streaming-Media-Server-Pro 前言 我的目标是将程序打造成属于每个人的直播源服务,且对每个人完全开源免费!可作为家庭影院电视.视频等流媒体的提供商,兼容全平台,只需下载视频播放 ...

  2. Sqoop 组件安装与配置

    下载和解压 Sqoop Sqoop相关发行版本可以通过官网 https://mirror-hk.koddos.net/apache/sqoop/ 来获取 安装 Sqoop组件需要与 Hadoop环境适 ...

  3. swagger访问url

    http://172.16.5.130:8080/swagger-ui.html 上面的ip:port 根据实际情况调换 如果设置了server.servlet.context-path 比如: se ...

  4. SDUT 2022 Autumn Team Contest 7th

    1.J题:给你T组数据,每一组数据给你一个区间,让你求这个区间的范围,区间的起始时间和终止时间可能被包含或重复 思路:思路的话,就是直接把给定的两个区间的之间的数包括端点存到vector去重,然后直接 ...

  5. 璞华HawkEye平台助力乳品行业巨头在数字化转型中领“鲜”一步!

    中国乳制品的市场规模接近4,000亿.在今天,产业数字化正在帮助这个传统产业实现更高质量的发展. 乳品行业现状 随着乳品行业规模扩大,各工厂引进大量的专用设备,设备故障也随之增多.设备的突发故障极易造 ...

  6. 基于python的RSA解密算法

    摘要 网上有很多关于RSA的解密脚本,欧拉函数.欧几里得函数什么的,对于一个大专生的我来说,一窍不通,至此经历了三天三夜,我翻阅了RSA的加密原理,以及其底层算法,专研出了一套我自己的解密算法,尚有不 ...

  7. Mysql 数据库SQL脚本导入

    1.进入mysql命令行窗口 mysql -uroot -p123456 2.展示所有数据库 show databases: 3.选择数据库 use 数据库名 4.展示选择的数据库中所有表 show ...

  8. 局域网内搭建CentOS PHP 环境

    首先我们找到一台已经搭建好的CentOS,IP地址我就不说啦. 我们需要用到的几个工具,一个是SecureCRT用于远程连接,还有一个用于文件上传和下载就是filezilla 准备好了之后,我们就可以 ...

  9. 十大 CI/CD 安全风险(三)

    在上一篇文章,我们了解了依赖链滥用和基于流水线的访问控制不足这两大安全风险,并给出缓解风险的安全建议.本篇文章将着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践. Poisoned Pipe ...

  10. Linux 下配置 hosts 并设置免密登录

    Linux 下配置 hosts 并设置免密登录 作者:Grey 原文地址: 博客园:Linux 下配置 hosts 并设置免密登录 CSDN:Linux 下配置 hosts 并设置免密登录 说明 实现 ...