Python 作业
Python 单元的完整作业:10 道编程题,涵盖字符串、列表、循环、字典、记忆化与生成器。
截止时间:太平洋时间 2016 年 4 月 28 日晚上 11
(不过你应该在项目 4 之前或期间完成它)
模板
在这里下载。
自动评分
抱歉!目前没有自动评分器。请尽力测试你的作业,评分会相当宽松——看的是努力程度。时间允许的话,评分器会尽快上线。
习题
笔记
作业题 1:调皮字符串
在字符串中错误地使用引号时,会返回什么错误信息?
请给出一个例子,并解释该错误信息。
笔记
作业题 2:水果和蔬菜
x = ["apple", "banana", "carrot"]
写一行代码,执行后返回 “apples bananas and carrots”。
笔记
作业题 3:Fizz Buzz
写一个程序,打印从 1 到 n 的整数(n 是过程的参数)。但遇到 3 的倍数时,不打印数字,改打印 “Fizz”;遇到 5 的倍数时打印 “Buzz”;3 和 5 的公倍数则打印 “FizzBuzz”。
笔记
作业题 4:白雪公主和七个小矮人
写一个名为 snow_white 的程序,接受两个数字参数:第一个是 num_chants,第二个是 max_sing。
程序功能:1. 交替打印 “heigh” 和 “ho”;2. 每喊完 num_chants 次 “heigh” 或 “ho”,打印一次 “its off to work we go”;3. “it’s off to work we go” 打印满 max_sing 次后就停止。
示例:每 5 次交替的 “hi” 和 “ho” 之间打印一次 “it’s off to work we go”,最多打印 2 次。
snow_white(5, 2)
heigh
ho
heigh
ho
heigh
it's off to work we go
ho
heigh
ho
heigh
ho
it's off to work we go
请用 while 循环(可能还要用到控制语句)实现这个行为。
笔记
作业题 5:把第一个奇数挪到队尾(改编自 CS10)
写一个名为 push_first_odd_back 的函数,接受一个列表作为参数。这个函数要把输入列表中的第一个奇数放到列表末尾。不要返回新列表——事实上这个函数不该返回任何东西,它只应该修改输入列表。(提示:用 while 循环)
笔记
作业题 6:猫和狗
写一个程序,如果给定字符串中 “cat” 和 “dog” 出现的次数相同,就返回 True。
cat_dog('catdog') → True
cat_dog('catcat') → False
cat_dog('1cat1cadodog') → True
笔记
作业题 7:字符频率
写一个函数 char_freq(),接受一个字符串,统计其中每个字符出现的频率。用 Python 字典来表示频率表,以每个字母为键,存储该字母出现的次数。
试试用 char_freq("abbabcbdbabdbdbabababcbcbab") 这样的输入来测试。
笔记
作业题 8.1:凯撒密码
写一个函数 rotate_letters(),接受一个数字,生成一份新的小写字母映射:每个字母按该数字偏移。把新映射以字典形式返回,原字母映射到偏移后的字母。例如,rotate_letters(2) 会把 'a'->'c'、'b'->'d'、'c'->'e',以此类推。
笔记
作业题 8.2:凯撒密码
写一个函数 decode_cipher(),接受一份字母映射字典和一个密文字符串(只含小写字母)。当每个字符都被字典中的映射替换后,返回解码得到的字符串。例如,decode_cipher(rotate_letters(2), "abc") 应该返回 "cde"。
已知字母被偏移了 13,请用这个函数解码 “jbj fpurzr vf terng”。
笔记
作业题 9:阶乘累乘的记忆化
仿照 memo_fib 的写法,实现一个记忆化的阶乘累乘过程。你必须使用递归。
5 的阶乘累乘 = 5! * 4! * 3! * 2! * 1!
笔记
作业题 10:成长的烦恼(指数级)
写一个生成器 gen_exp(),接受一个数字 n,从 n 开始,(永远地)生成 n 的 n 的 n……指数塔序列。例如 gen_exp(2) 的前几个元素应该是 2、(2^2)、((2^2)^2)、(((2^2)^2)^2)。
提交作业!
请以 python_hw 而非 hw12 的名字提交。请在 2016 年 4 月 1 日当天或之后提交(不要提前)!
提交方法见这份指南,其中讲解了基本的终端命令和作业提交流程。
提交过程中遇到任何问题,随时找助教(TA)!