讨论 1:函数、控制流
出勤
你的助教会在讨论期间过来签到。
如果你因正当理由(如生病或时间冲突)错过了讨论课,请在一周内发邮件至 cs61a@berkeley.edu 以获得出勤分。While 和 If
学习使用 if 和 while 是一项基本技能。在本次讨论中,
请专注于我们在前三节课中学习的内容:if、while、
赋值(=)、比较(<、>、==)和算术运算。请不要
使用我们课堂上尚未讨论过的 Python 功能,如 for、
range 和列表。我们将在课程后续有充足的时间来学习这些内容,
现在正是练习使用 if(教材章节
1.5.4)
和 while(教材章节
1.5.5)的时候。
问题求解
实现函数的一个有用方法是:
- 选择一个示例输入和对应的输出。
- 用简单的步骤描述一个过程(用自然语言),从输入计算出输出。
- 确定你需要哪些额外的名称来执行这个过程。
- 使用这些额外的名称用代码实现这个过程。
- 确定你的实现是否真的适用于你最初的示例。
- 确定你的实现是否真的适用于其他示例。(如果不适用,你可能需要修改第2步。)
重要的是,这种方法不是直接从阅读题目到编写代码。
例如,在下一页的 is_prime 问题中,你可以:
- 选择
n为 9 作为输入,False作为输出。 - 过程如下:检查
9(n)不能被 1 到9(n)之间的任何整数整除。 - 引入
i来表示 1 到 9(n)之间的每个数字。 - 实现
is_prime(这部分由你和你的小组来完成)。 - 通过思考代码的执行过程来检查
is_prime(9)是否会返回False。 - 检查
is_prime(3)是否会返回True,is_prime(1)是否会返回False。
Q1:是否为素数?
编写一个函数,当正整数 n 是素数时返回 True,
否则返回 False。
素数 n 是一个不能被 1 和 n 以外的任何数整除的数。例如,13 是素数, 因为它只能被 1 和 13 整除,但 14 不是素数,因为它可以被 1、2、7 和 14 整除。
使用 % 运算符:x % y 返回 x 除以 y 的余数。
Q2:Fizzbuzz
实现经典的 Fizz Buzz
序列。fizzbuzz 函数
接受一个正整数 n,并对从 1 到 n 的每个整数
打印一行输出。对于每个 i:
- 如果
i同时被 3 和 5 整除,打印fizzbuzz。 - 如果
i被 3 整除(但不被 5 整除),打印fizz。 - 如果
i被 5 整除(但不被 3 整除),打印buzz。 - 否则,打印数字
i。
尽量使你的 fizzbuzz 实现简洁。
Q3:有序数字
实现函数 ordered_digits,它接受一个
正整数作为输入,如果其数字从左到右
是非递减顺序的,则返回 True,否则返回 False。例如,
5、11、127、1357 的数字是有序的,但 21 或 1375 的数字不是。
Q4:不同数字
编写一个函数,返回一个正整数中不同数字的个数。
提示:你可以使用
//和%将一个正整数分离为 其个位数字和其余数字。你可能会发现先定义一个函数
has_digit(n, k)会很有帮助,该函数判断数字n是否包含数字k。
Q5:重复
定义:正整数 n 是正整数 m 的重复序列,如果 n 是由 m 的数字重复一次或多次组成的。例如,616161 是 61 的重复序列,但 61616 不是。
实现 repeating,它接受正整数 t 和 n。它返回 n 是否是某个 t 位整数的重复序列。
rest 的最后 t 位是否与 n 的最后 t 位匹配,然后移除 rest 的最后 t 位。