作业


Python练习 Lab8 (Dec/10/2019)

内容及要求:

lab8


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)

内容及要求:

lab7


Python练习 Lab6 (Nov/19/2019)

内容及要求:

lab6


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)

内容及要求:

lab5


Python练习 Lab4 (Nov/05/2019)

内容及要求:

lab4


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)

内容及要求:

Lab3


Python练习 Lab2 (Oct/22/2019)

内容及要求:

Lab2

本次Lab程序输出是图形, 系统无法测试, 请自己本地测试后提交.


Python练习 Lab1 (Oct/15/2019)

内容及要求:

Lab1

请先到 http://ic.openjudge.cn注册账号, 用户名 请务必用北大学号, 以便于统计成绩.


Python练习 Lab0 (Oct/8/2019)

注: 本次作业不需提交

内容:

  1. 熟悉自己所用操作系统的终端操作, 可以在终端下复制、查看文件, 改变当前路径等

  2. 在自己的机器上安装anaconda/miniconda, 熟悉 python3, ipython, jupyter, pip的用法, 选择并熟悉一个编辑器或IDE

  3. http://iwork.pku.edu.cn 上申请成为正式用户, 阅读Help, 创建 Workspace, 熟悉 Notebook 工作环境

  4. 在Notebook 中 打印运行 print('Hello Python!')

  5. 在Notebook 中 创建一个 markdown 类型的Cell, 写一段markdown 文本

提交:

提交截止:


概论作业5 (Oct/8/2019)

  1. 北京大学某单位的某台机器IP地址为162.105.80.160, 子网掩码为255.255.255.192,

    • 1) 该单位的网络号(网络+子网)是多少?

    • 2) 该单位理论上可容纳多少主机?

    • 3) 北大可以有多少个这样的子网(假定北大全部是162.105网段)?

  2. 解释TCP协议建立连接为什么设计为三步握手(3-way handshake)?

  3. 有哪些恶意软件, 如何防范恶意软件?

提交:

在你的GitHub ichw 仓库中新建一个名为 "ichw5.md" Markdown 格式 的文本文件, 在该文件中回答上述问题, 请注意排版显示要清晰美观.

提交截止:

2019年10月14日23:59


概论作业4 (Sep/24/2019)

回答下述问题

  1. 解释作业、进程、线程的概念,进程和线程概念的提出分别解决了什么问题?

  2. 调研虚拟存储器的概念,描述其工作原理和作用

提交:

在你的GitHub ichw 仓库中新建一个名为 "ichw4.md" Markdown 格式 的文本文件, 在该文件中回答上述问题, 请注意排版显示要清晰美观.

提交截止:

2019年10月6日23:59


概论作业3 (Sep/24/2019)

内容:

  1. 调研理解异或运算法则. 解决下面的问题: 有2n+1个数,只有一个单着,别的都是成对出现的,找出这个单着的数。比如:2 1 3 2 1, 单着的数是3.

  2. 一个数列有101个整数,每个数范围为1-100,这101个数中有两个数是重复的,其他的都是唯一的,找到这个重复出现的数.

  3. 详述通用的高速缓存存储器结构及工作原理

提交:

在你的GitHub ichw 仓库中新建一个名为 "ichw3.md" Markdown 格式 的文本文件, 在该文件中回答上述问题, 请注意排版显示要清晰美观.

提交截止:

2019年10月6日23:59


概论作业2 (Sep/10/2019)

内容:

  1. 用你的语言描述图灵为什么要证明停机问题, 其证明方法和数学原理是什么.

  2. 你在向中学生做科普,请向他们解释二进制补码的原理.

  3. 某基于 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)

内容:

  1. 在自己的github 账号下创建一个私有仓库(repository) 名为 homepage , 在 README.md 中 介绍自己, 给自己设计一个个人主页, 要求有联系信息, 个人照片.

注: 请将助教们的github账号设置为你私有仓库 ichw 的Collaborator.

提交:

给两位助教发邮件, 在邮件中介绍自己是谁, 联系方式, github 账号地址, homepage 仓库地址. homepage 的README.md中可以先有基本联系信息, 其它设计可以慢慢完善.

提交截止:

2019年9月16日23:59


概论作业0 (Sep/10/2019)

内容:

  1. 记住键盘布局, 可以熟练盲打.

  2. 拥有一个可靠的邮件帐号, 学习写邮件的礼仪,养成每天定时收发邮件的习惯.

  3. https://github.com 上注册一个账号, 了解如何使用 git, 学习如何利用 github .

  4. 学习掌握如何编辑 Markdown 格式 的文本文件