第一节课课后习题
前言
啊嘶前几天刚肝完了苏大微软俱乐部的Hi Hackathon。和南音一起在Touhou Player AI的基础上进行了修改,修改之后的BAKA AI大概勉强能打到1面关底的样子。 这次的作业是python基础,啊嘶写程序基本都是用java,python很多黑科技都没有用过。因此虽然作业简单还是有很多东西可以学到的。 最后介绍一下工作环境吧:
- Python版本: 2.7.15, 3.7.0
- IDE: Pycharm, VScode
- VCS工具: git bash (git bash执行python命令会卡死,所以交互模式得使用cmd)
- Markdown编辑器: dillinger.io
作业
作业题目不能直接复制,于是从html文件上扣下来了……
1、浏览网站github.com,借助搜索引擎,完成如下操作:
- 通过搜索引擎了解“源码管理”和git;
- 在本地计算机上安装git;
- 在github.com上注册个人账号,并建立个人代码仓库;
- 在github.com上创建个人博客,并将第3题中的短文发布到个人博客(提示:运用搜索引擎,查找能够在github.com上应用的开源代码以及代码的部署方法)。
大概是最有难度的一道题目了。前三条以前在UCB学CS61b的时候就做好了,重点说一下第四条。 我的博客是直接从BY的github.io fork下来的, 然后再删除_post文件夹中所有的文档,把网页背景从文艺图片换成了东方Project剧毒少女系列的美图QWQ。修改了about.html,404.html,tags.html文档的内容,把BY的信息换成自己的,有一股抄作业的负罪感…… 博客是使用Jekyll模板搭建的,使用说明点击这里CO(↑)CO(↓)
2、直角三角形的斜边长度为50,一条直角边的长度是30,编写程序,计算另外一条直角边的长度。
介绍一个很厉害的 算法:让所有的计算都在人脑中进行,然后直接输出结果40(雾 因为强大的计算功能,python交互模式可以当计算器使用
>>> import math
>>> math.sqrt(50 * 50 - 30 * 30)
40.0
注意sqrt函数需要导入math包之后才可以使用, 接下来都默认已经导入math包了
3、在交互模式中,完成以下操作:
- 创建如下变量和对象的引用关系:a = 2.5, b = 7, c = 6;
- 分别计算:(1)a除以b的商;(2)b除以c的余数;(3)c除以a的商;(4)b的3次方。
>>> a, b, c = 2.5, 7, 6
>>> a / b
0.35714285714285715
>>> b % c
1
>>> c / a
2.4
>>> math.pow(b, 3)
343.0
4、在Python中有专门支持分数运算的标准库fractions,利用它完成如下计算:
- 3 + 3/5
- 3/7的平方
- 1/8 * -2/9 + 7/8
- 分别得到11/13的分子和分母
- 将1.25转化为分数
先看一遍fractions文档,掌握其中几个关键函数的用法:
- 创建对象: Fraction(分子, 分母); Fraction(‘分式或者小数’)
- Fraction对象支持四则运算
>>> from fractions import Fraction >>> 3 + Fraction(3, 5) Fraction(18, 5) >>> Fraction(3, 7) * Fraction(3, 7) Fraction(9, 49) >>> Fraction(1, 8) * Fraction(-2, 9) + Fraction(7, 8) Fraction(61, 72) >>> x = Fraction(11, 13) >>> x.numerator, x.denominator (11, 13) >>> Fraction('1.25') Fraction(5, 4)
5、写出字符串“0123456789”经下述切片操作之后的返回值:
- d[:: 2]
- d[1: 4]
- d[1:: 2]
- d[:: -1]
- d[-2:: -2]
>>> d[::2]
'02468'
>>> d[1:4]
'123'
>>> d[1::2]
'13579'
>>> d[::-1]
'9876543210'
>>> d[-2::-2]
'86420'
6、已知字符串“You need Python”,在交互模式中分别实现如下效果:
- 获得字符串的第一个和最后一个字符;
- 获得字符串的字符总数;
- 将字符串中的“You”替换为“I”;
- 将字符串中每个单词的首字母都变成大写;
- 以空格为分隔符,分割此字符串,然后用“@”为连接符,将其连接起来;
- 将上一步中所得字符串完全反转。
>>> s = "You need Python"
>>> s[0], s[-1]
('Y', 'n')
>>> len(s)
15
>>> 'You need Python'.replace('You', 'I')
'I need Python'
>>> import string
>>> string.capwords('You need Python')
'You Need Python'
>>> s = s.replace(' ','@')
>>> s
'You@need@Python'
>>> s[::-1]
'nohtyP@deen@uoY'
replace
函数: str.replace(查找值,替换值,最多替换次数)capwords
函数:string.capwords(str),将str中所有单词首字母变成大写
7、创建一个列表,以城市的电话区号为元素,比如北京的区号是010,上海的区号是021,苏州的区号是0512,杭州的区号是0571。
TODO:想写一个爬虫把区号爬下来,先鸽了
8、对于列表lst = [1, 2, 3, 4, 5],将其中的偶数剔除,得到只有奇数的列表。
>>> lst = [1, 2, 3, 4, 5]
>>> odd = [x for x in lst if x % 2 == 1]
>>> odd
[1, 3, 5]
列表生成式: [x for x in … (if …)]
9、已知列表[[1, 2], “python”, 234, 3.14],在交互模式中分别实现如下效果:
- 得到数字1;
- 得到字母“n”;
- 得到由234和3.14组成的列表;
- 得到最后一个元素;
>>> list = [[1, 2], "python", 234, 3.14]
>>> list[0][0]
1
>>> list[1][-1]
'n'
>>> [list[2], list[3]]
[234, 3.14]
>>> list[-1]
3.14
list套list实现二维数组还是可以接受的,更高维的推荐使用numpy库
10、比较内置函数sorted和列表的方法sort的异同。
sorted()
是一个nondestructive-method, 而sort()
是destructive-method.sorted()
采用的算法是Timsort
11、请注意观察如下操作,并亲自在交互模式中操作验证:
>>> a = 256
>>> b = 256
>>> a is b
True
>>> c = 257
>>> d = 257
>>> c is d
False
>>> lst1 = ["python", "java"]
>>> lst2 = ["python", "java"]
>>> lst1 is lst2
False
>>> lst3 = lst1
>>> lst1 is lst3
True
Python在变量赋值上和java一样是传递引用,即如果等号右边是一个object,那么左边保存的是指向这个对象的地址。is
运算符比较的是两边变量的地址是否相同。注意到python对变量数值属于[-5, 256]的整数进行了优化,这些变量将指向同一地址。因此小于等于256的a,b;由等号直接赋值的lst3,lst1都指向了同一个地址。
另外,对于对象的比较,python的is
相当于java的==
,python的==
相当于java的.isEqual()
想在python中定义
==
只需要override对象的__eq__
函数即可
12、回文是很有意思的文字游戏。请通过网络搜集回文词汇或句子,然后用Python检验是否为回文。
>>> def hw(s):
... return s == s[::-1]
...
>>> hw("上海自来水来自海上")
True
>>> hw("Touhou Project")
False
吐槽一句,python的切片真是好用啊
13、在交互模式中创建一个字典,要求“键”是自己的QQ好友昵称,“值”是相应的QQ号。
>>> friends = {"来姐":"217*******", "来姐复制人":"774******"}
>>> friends
{'来姐': '217*******', '来姐复制人': '774******'}
友情提醒,请珍惜自己的QQ号,请勿在公共场合膜🐸
14、假设有字典{“lang”: “python”, “number”: 100},在交互模式中进行操作,实现如下效果:
- 得到键“lang”的值;
- 得到值“100”的键;
- 得到字典中键值对的数量;
- 为字典增加一个键值对;
- 删除字典中的一个键值对;
- 修改一个键值对的值;
- 判断“city”是否是字典中的键。
>>> dic = {"lang": "python", "number": 100}
>>> dic["lang"]
'python'
>>> [key for key in dic.keys() if dic[key] == 100]
['number']
>>> len(dic)
2
>>> dic["code"] = "UTF-8"
>>> dic.pop("code")
'UTF-8'
>>> dic["number"] = 99
>>> "city" in dic.values()
False
15、通过help函数和网络,研习内置函数input和字符串的方法fromat的使用方式,并且实现如下操作:
- 通过input函数获取键盘输入的内容,并显示键盘输入内容的类型
- 用字符串的format方法,实现格式化输出
>>> def doit():
... x = input()
... print(type(x))
... print("you just typed {0}".format(x))
...
>>> doit()
Komeiji Koishi
<class 'str'>
you just typed Komeiji Koishi