15B: Python 练习题

练习15A、15B和15C不分学习顺序。

在这节课中有几个中等难度的练习,其中结合一些之前所学的工具。

编程练习: 冬季的温度
在这个练习中,你将创建一个温度转换器,使得华氏温度和摄氏度互相转换。你需要以下两个转换公式(c代表摄氏度,f代表华氏):

\displaystyle{f = c \times \frac{9}{5} + 32}

\displaystyle{c = (f -32)\times\frac{5}{9}.}

输入是一个由小数和字母F或C组成的字符串,例如 "13.2C"。你需要将输入转换到与其对应的另一个温度单位,并以相同的格式打印转换值。例如, 如果输入是"8F" 那么输出就应该是(估计值)
"-13.333C";如果输入为 "12.5C" 那么输出则为 "54.5F"。

编程练习: 信用检查
假设你现在被一家银行雇用,你需要编写一个程序来检查给定的信用卡号码是否有效。程序check(S) 的输入应为字符串S。如果这个字符串没有下面的格式 "#### #### #### ####" (每个 # 代表一个数字), 那么它应该返还False。如果数字之和能被10整除(“校验”的方法), 然后程序应该返回True, 其他情况下程序都应该返还False。举例来说,如果 S 是字符串 "9384 3495 3297 0123" 那么尽管格式是正确的,但数字之和是72,所以你应该返还False

在下个练习中, 使用 string.split(),它可以删除一个单词中的空格,并返还它所包含的字母的序列;还有string.lower(),它可以将一个字符串转换成小写。例如:

  • "Split these words!".split() 会返回序列 ["Split", "these", "words!"]
  • "LOWERCase".lower() 会返回 "lowercase"

注意: split() 还可以进行其他方式分裂;请看此 文档.

编程练习: 诗歌分析
一位作家正在写最新的诗,图灵和机器。聘请你来帮忙找出诗歌中出现次数最多的这个词。你可以通过反复调用input()来读取诗的每一行,其中最后一行包含三个字符 ###。每一行都是由单个空格分隔的单词组成的,没有数字或标点符号。请你将所有的单词转换成小写,并打印出现次数最多的那个单词(假设不会有多个相同次数的单词出现)。例如,如果输入:

Here is a line like sparkling wine
Line up fast or be the last
###
那么输出应该是

line
因为它出现了两次,其他单词只出现了一次。

假设你有n种不同口味的冰激凌, 并且想使用正好其中的k种口味来制作一个圣代。请问一共有多少种不同可能的口味混合?假设,如果n=4和k=2, 那么一共有六种可能:

(1) A 和 B, (2) A 和 C, (3) A 和 D, (4) B 和 C, (5) B 和 D, (6) C 和 D.

下一个问题是关于这个数字的计算。

编程练习: n选k
计算从n种东西中选出k种东西的组合的公式是

\displaystyle{\frac{n}{k}\times\frac{n-1}{k-1}\times\cdots\times\frac{n-k+2}{2}\times\frac{n-k+1}{1}}

编写一个程序choose(n, k) ,它会有两个整数实参nk; 假设n>k>0。这个程序应该返回上面给出的公式的值。

在数学中,你在前面的练习中计算的数字通常是写成这样的

\displaystyle{\binom{n}{k}}

并被称为"nk." 关于这些值有很多有趣的事情,例如

\displaystyle{\binom{n}{k} = \binom{n}{n-k}}\displaystyle{\binom{n}{k} = \binom{n-1}{k} + \binom{n-1}{k-1}}

这是我们这节练习课的结尾,你可以进入下一节课了。