作业
Python练习 Lab8 (Dec/10/2019)
内容及要求:
Python作业 Assign4 (Dec/10/2019)
单词统计
统计一个文本文件中单词的出现次数。
网站 http://www.gutenberg.org提供了很多名著 的TXT版本供下载. 例如, 小说 ALICE'S ADVENTURES IN WONDERLAND 的一个TXT 版本在http://www.gutenberg.org/cache/epub/19033/pg19033.txt.
请写一个单词统计的程序, 对于给定URL的文件, 输出单词的出现频率, 按频率大小倒序 输出, 如下所示.
the 807
and 404
a 328
to 327
of 318
she 237
in 227
it 183
you 171
alice 168
如何得到要统计的文件的URL
要统计的文件的URL通过命令行参数给出。
假定有一个Python 文件 t.py, 其源码如下:
import sys
print(sys.argv)
在终端中分别以如下方式运行 t.py, 观察执行结果
$ python t.py
['t.py']
$ python t.py 1 2 3
['t.py', '1', '2', '3']
sys.argv 列表保存了用户传递给Python的参数, 参数都是字符串。argv[0] 永远 存在, 通常是Python文件的名字。其他参数(如果给出了)在 argv[1:]中。
本次作业的完整代码框架如下:
#!/usr/bin/env python3
"""wcount.py: count words from an Internet file.
__author__ = "Zhangsan"
__pkuid__ = "1600012345"
__email__ = "zhangsan@pku.edu.cn"
"""
import sys
from urllib.request import urlopen
def wcount(lines, topn=10):
"""count words from lines of text string, then sort by their counts
in reverse order, output the topn (word count), each in one line.
"""
# your code goes here
pass
if __name__ == '__main__':
if len(sys.argv) == 1:
print('Usage: {} url [topn]'.format(sys.argv[0]))
print(' url: URL of the txt file to analyze ')
print(' topn: how many (words count) to output. If not given, will output top 10 words')
sys.exit(1)
# your code goes here
# should anayze whether paras are right or not
你的任务是使上述框架功能完整正确。
运行
$ python wcount.py http://www.gutenberg.org/cache/epub/19033/pg19033.txt 20
或者
$ python wcount.py http://www.gutenberg.org/cache/epub/19033/pg19033.txt
将得到如前所示的结果。
要求:
提交一个文件 wcount.py , 实现上述要求.
提交:
在自己的github的作业库ichw中建一个文件夹pyassign4,作业提交到这个文件夹中,本次作业的程序名为wcount.py
提交截止:
2019年12月23日23:59
Python作业 Assign3 (Dec/3/2019)
放瓷砖
有一面墙, 规格为 长 m 宽 n 的长方形, 现在要把规格为 长 a 宽 b 的 长方形瓷砖铺满该墙面, 请问有多少种铺法?请输出所有的铺法, 用户可以选定某种铺法, 输出对应的turtle图形进行可视化。
示例:
墙: 3 x 2, 瓷砖: 2 x 1
铺法(仅供参考):
[(0, 1), (2, 5), (3, 4)]
[(0, 3), (1, 2), (4, 5)]
[(0, 3), (1, 4), (2, 5)]
墙: 6 x 8, 砖: 2 x 3
[(0, 1, 6, 7, 12, 13), (2, 3, 8, 9, 14, 15), (16, 17, 4, 5, 10, 11), (18, 19, 24, 25, 30, 31), (32, 33, 20, 21, 26, 27), (34, 35, 22, 23, 28, 29), (36, 37, 38, 42, 43, 44), (39, 40, 41, 45, 46, 47)]
[(0, 1, 6, 7, 12, 13), (2, 3, 8, 9, 14, 15), (16, 17, 4, 5, 10, 11), (18, 19, 20, 24, 25, 26), (21, 22, 23, 27, 28, 29), (36, 37, 42, 43, 30, 31), (32, 33, 38, 39, 44, 45), (34, 35, 40, 41, 46, 47)]
[(0, 1, 2, 6, 7, 8), (3, 4, 5, 9, 10, 11), (18, 19, 24, 25, 12, 13), (20, 21, 26, 27, 14, 15), (16, 17, 22, 23, 28, 29), (36, 37, 42, 43, 30, 31), (32, 33, 38, 39, 44, 45), (34, 35, 40, 41, 46, 47)]
[(0, 1, 2, 6, 7, 8), (3, 4, 5, 9, 10, 11), (18, 19, 20, 12, 13, 14), (16, 17, 21, 22, 23, 15), (32, 24, 25, 26, 30, 31), (33, 34, 35, 27, 28, 29), (36, 37, 38, 42, 43, 44), (39, 40, 41, 45, 46, 47)]
turtle图形化如下(仅供参考):
要求:
提交一个文件 tile.py , 实现上述要求.
提交:
在自己的github的作业库ichw中建一个文件夹pyassign3,作业提交到这个文件夹中,本次作业的程序名为tile.py
提交截止:
2019年12月23日23:59
Python练习 Lab7 (Dec/3/2019)
内容及要求:
Python练习 Lab6 (Nov/19/2019)
内容及要求:
Python作业 Assign2 (Nov/12/2019)
汇率计算
本次作业来源于 http://www.cs.cornell.edu/courses/cs1110/2018fa/assignments/assignment1/index.php#service
简要说明
网站 http://cs1110.cs.cornell.edu/2018fa/a1server.php? 提供了查询计算汇率的功能。要正确使用,需要访问时提供参数 :
from=source&to=target&amt=amount
其中 source
, target
是由三个字母代表的货币名称, amt
是要计算的数值,
例如 from=USD&to=EUR&amt=2.5
表示 计算 2.5美元对应多少欧元
完整的 URL请求为:
http://cs1110.cs.cornell.edu/2018fa/a1server.php?from=USD&to=EUR&amt=2.5
在浏览器中输入该地址, 得到的结果类似为:
{ "from" : "2.5 United States Dollars", "to" : "2.24075 Euros", "success" : true, "error" : "" }
本次作业的主要目标, 就是分析得到的字符串, 从里面获取需要的结果.
你需要实现的函数:
def exchange(currency_from, currency_to, amount_from):
"""Returns: amount of currency received in the given exchange.
In this exchange, the user is changing amount_from money in
currency currency_from to the currency currency_to. The value
returned represents the amount in currency currency_to.
The value returned has type float.
Parameter currency_from: the currency on hand
Precondition: currency_from is a string for a valid currency code
Parameter currency_to: the currency to convert to
Precondition: currency_to is a string for a valid currency code
Parameter amount_from: amount of currency to convert
Precondition: amount_from is a float"""
如何在Python3中访问URL
from urllib.request import urlopen
doc = urlopen('http://cs1110.cs.cornell.edu/2016fa/a1server.php?from=USD&to=EUR&amt=2.5')
docstr = doc.read()
doc.close()
jstr = docstr.decode('ascii')
doc.read() 返回的是字节流, 如:
b'{ "from" : "2.5 United States Dollars", "to" : "2.24075 Euros", "success" : true, "error" : "" }'
可以调用 decode
方法得到正常的字符串.
迭代开发过程
本次作业建议采取迭代开发方法, 从基本功能开始, 逐渐完成最终功能, 具体可参考
http://www.cs.cornell.edu/courses/cs1110/2018fa/assignments/assignment1/index.php#iterative
编写测试函数
对于迭代开发中实现的每一个函数, 需要提供一个测试函数, 测试其是否正确, 可
以用Python语言的 aasert
函数编写测试代码.
def test_get_from()
assert('USD' == get_from(json))
你需要写一个 testAll
函数, 里面测试所有你编写的测试函数
def testAll()
"""test all cases"""
test_get_from()
test_B()
test_C()
print("All tests passed")
注意: 所有的测试函数和被测函数都在同一个文件 currency.py 中, 不需要单独建立测试文件, 这和http://www.cs.cornell.edu/courses/cs1110/2018fa/assignments/assignment1/index.php 要求不同。
要求:
提交一个文件 currency.py , 实现上述要求.
75分: 正确实现了 exchange
函数
85分: 提供了测试函数
95分: 提供了模块说明和函数说明
提交:
在自己的github的作业库ichw中建一个文件夹pyassign2,作业提交到这个文件夹中,本次作业的程序名为currency.py
提交截止:
2019年11月25日23:59
Python练习 Lab5 (Nov/12/2019)
内容及要求:
Python练习 Lab4 (Nov/05/2019)
内容及要求:
Python作业 Assign1 (Oct/29/2019)
内容及要求:
用python的turtle库, 写一个程序 planets.py, 能仿真太阳系水金火木土地球6大行星围绕太阳的运行轨迹. 如下图所示:
planets.py要符合基本的python 编程规范.
提交:
在自己的github的作业库ichw中建一个文件夹pyassign1,作业提交到这个文件夹中,本次作业的程序名为planets.py
提交截止:
2019年11月11日23:59
Python练习 Lab3 (Oct/29/2019)
内容及要求:
Python练习 Lab2 (Oct/22/2019)
内容及要求:
本次Lab程序输出是图形, 系统无法测试, 请自己本地测试后提交.
Python练习 Lab1 (Oct/15/2019)
内容及要求:
请先到 http://ic.openjudge.cn注册账号, 用户名 请务必用北大学号, 以便于统计成绩.
Python练习 Lab0 (Oct/8/2019)
注: 本次作业不需提交
内容:
-
熟悉自己所用操作系统的终端操作, 可以在终端下复制、查看文件, 改变当前路径等
-
在自己的机器上安装anaconda/miniconda, 熟悉 python3, ipython, jupyter, pip的用法, 选择并熟悉一个编辑器或IDE
-
在 http://iwork.pku.edu.cn 上申请成为正式用户, 阅读Help, 创建 Workspace, 熟悉 Notebook 工作环境
-
在Notebook 中 打印运行
print('Hello Python!')
-
在Notebook 中 创建一个 markdown 类型的Cell, 写一段markdown 文本
提交:
无
提交截止:
无
概论作业5 (Oct/8/2019)
-
北京大学某单位的某台机器IP地址为162.105.80.160, 子网掩码为255.255.255.192,
-
1) 该单位的网络号(网络+子网)是多少?
-
2) 该单位理论上可容纳多少主机?
-
3) 北大可以有多少个这样的子网(假定北大全部是162.105网段)?
-
-
解释TCP协议建立连接为什么设计为三步握手(3-way handshake)?
-
有哪些恶意软件, 如何防范恶意软件?
提交:
在你的GitHub ichw 仓库中新建一个名为 "ichw5.md" Markdown 格式 的文本文件, 在该文件中回答上述问题, 请注意排版显示要清晰美观.
提交截止:
2019年10月14日23:59
概论作业4 (Sep/24/2019)
回答下述问题
-
解释作业、进程、线程的概念,进程和线程概念的提出分别解决了什么问题?
-
调研虚拟存储器的概念,描述其工作原理和作用
提交:
在你的GitHub ichw 仓库中新建一个名为 "ichw4.md" Markdown 格式 的文本文件, 在该文件中回答上述问题, 请注意排版显示要清晰美观.
提交截止:
2019年10月6日23:59
概论作业3 (Sep/24/2019)
内容:
-
调研理解异或运算法则. 解决下面的问题: 有2n+1个数,只有一个单着,别的都是成对出现的,找出这个单着的数。比如:2 1 3 2 1, 单着的数是3.
-
一个数列有101个整数,每个数范围为1-100,这101个数中有两个数是重复的,其他的都是唯一的,找到这个重复出现的数.
-
详述通用的高速缓存存储器结构及工作原理
提交:
在你的GitHub ichw 仓库中新建一个名为 "ichw3.md" Markdown 格式 的文本文件, 在该文件中回答上述问题, 请注意排版显示要清晰美观.
提交截止:
2019年10月6日23:59
概论作业2 (Sep/10/2019)
内容:
-
用你的语言描述图灵为什么要证明停机问题, 其证明方法和数学原理是什么.
-
你在向中学生做科普,请向他们解释二进制补码的原理.
-
某基于 IEEE 754浮点数格式的 16 bit 浮点数表示, 有 8 个小数位, 请给出 ±0, ±1.0, 最大非规范化数, 最小非规范化数, 最小规范化浮点数, 最大规范化浮点数,
±∞, NaN 的二进制表示(表示形式请参照讲义).
提交:
在你的 github 创建一个私有仓库(repository) 名为 ichw, 在仓库中新建一个名为 "ichw2.md" Markdown 格式 的文本文件, 在该文件中回答上述问题, 请注意排版显示要清晰美观.
注: 请将助教们的github账号设置为你私有仓库 ichw 的Collaborator.
提交截止:
2019年9月23日23:59
概论作业1 (Sep/10/2019)
内容:
- 在自己的github 账号下创建一个私有仓库(repository) 名为 homepage , 在 README.md 中 介绍自己, 给自己设计一个个人主页, 要求有联系信息, 个人照片.
注: 请将助教们的github账号设置为你私有仓库 ichw 的Collaborator.
提交:
给两位助教发邮件, 在邮件中介绍自己是谁, 联系方式, github 账号地址, homepage 仓库地址. homepage 的README.md中可以先有基本联系信息, 其它设计可以慢慢完善.
提交截止:
2019年9月16日23:59
概论作业0 (Sep/10/2019)
内容:
-
记住键盘布局, 可以熟练盲打.
-
拥有一个可靠的邮件帐号, 学习写邮件的礼仪,养成每天定时收发邮件的习惯.
-
在 https://github.com 上注册一个账号, 了解如何使用 git, 学习如何利用 github .
-
学习掌握如何编辑 Markdown 格式 的文本文件