学员信息
- 姓名:徐响
- 学号:1901100167
- 学习内容:Python 14 天入门
- 学习用时:未知
学习笔记
Day1-9
收获总结
- print(‘%s%s=%s’%(x,y,xy),end=’\t’)
在这种print函数中,前面字符串中%s会一一对应后面%()中的元素。后面的end=‘\t’可以把每个结果之间以空格分开。 - num1 =int(input(“number1:”))
input接受键盘输入的内容,括号里的字符串为提示字符串。 - range函数和for while一样也是循环
range(x):从0到x每次加1
range(x,y):从x到y加1
range(x,y,z):从x到y依次加z - 列表函数,reverse()将列表元素倒序排列
[a]=[1,2,3,4,5]
print(a[-1]) ###取最后一个元素
[5]
print(a[:-1]) ### 除了最后一个取全部
[ 1 2 3 4 ]
print(a[::-1]) ### 取从后向前(相反)的元素
[ 5 4 3 2 1 ]
print(a[2::-1]) ### 取从下标为2的元素翻转读取
[ 3 2 1 ]
是取二维数组中第一维的所有数据
对于X[:,1]
是取二维数组中第二维的所有数据
对于X[:,m:n]
是取二维数组中第m维到第n-1维的所有数据
对于X[:,:,0]
是取三维矩阵中第一维的所有数据
对于X[:,:,1]
是取三维矩阵中第二维的所有数据
对于X[:,:,m:n]
是取三维矩阵中第m维到第n-1维的所有数据
数制: - 进制转换
Int() 十进制
Bin() 二进制
Oct() 八进制
Hex() 十六进制 - str字符串方法
map=str.maketrans(‘*-.’,’ ‘)
text=text.translate(map)
maketrans函数可以替换字符串中的特定字符,但是参数中前后位置要相同,前面写了几个字符,后面也要有几个字符替换,可以用空格。
text.split()
split()函数可以把一个字符串分割成列表,括号内可以指定某种特殊字符作为分割标志,也可以什么都不写,凡是遇到空格,分行等等都会分割。
print str.split( ); # 以空格为分隔符,包含 \n
print str.split(‘ ‘, 1 ); # 以空格为分隔符,分隔成两个
strset=(‘’.join(‘%s’%id for id in set1))
把列表变成字符串,用join函数,第一个参数用‘’包括的东西就是合成字符串之间的间隔,一般来说是空格。
a = text.split()
dic={ }
for x in a:
dic.setdefault(x,0)
dic[x]+=1
之前的字符串已经被split分割成一个一个词的列表,要统计每个词出现的次数,先设一个空字典,然后用for 遍历这个字典,这里
Setdefault(x,0)
dic[x]+=1
可以把每个没出现的key都加到字典里去,然后再次出现就键值加一。
for k in sorted(dic,key=dic.getitem,reverse=True):
b=sorted(dic.items(),key=lambda x:x[1],reverse=True)
这两个都可以排序。 - collections.Counter
但后面知道更好的是用标准库中的collections中的Counter函数来实现排序
c=Counter(dic[])
c=Counter(‘str’) ##可以用各种格式,str,dict,set,tuple等等来输入Counter
其中可以使用most_common(‘填写限制个数’)
replace函数可以用来替换字符串中的指定字符
如text=text.replace(‘better’,’worse’) - list操作
但如果在列表里,要移除或者替换有某种特征的元素,就要用for遍历
for x in a:
if ‘ea’ in x:
a.remove(x)
另外对于列表操作
cmp(list1, list2)
比较两个列表的元素
len(list)
列表元素个数
max(list)
返回列表元素最大值
min(list)
返回列表元素最小值
list(seq)
将元组转换为列表
list.append(obj)
在列表末尾添加新的对象
list.count(obj)
统计某个元素在列表中出现的次数
list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj)
将对象插入列表
list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj)
移除列表中某个值的第一个匹配项
list.reverse()
反向列表中元素
list.sort(cmp=None, key=None, reverse=False)
对原列表进行排序
list()函数还可以将字符串或者元组转换成列表。 - sys模块
让模块可用
import sys
sys.path.append(‘路径’)
from xxximport stats_word
sys.path包含一个目录(以字符串形式)列表,解释器就在这些目录中寻找模块。
Sys.path.append添加目录 - 异常捕捉
异常,用途是使某些错误操作不至于导致程序整体崩溃,提出修改意见,保留修改的空间,
Raise exception/TypeError/等等()
括号里可以写上提示语句。
在函数里用了raise里之后,在调用这些函数的时候,使用try/except/else/finally
捕获这些错误,再做其他处理 - os.path用法
file_path=os.path.join(os.path.dirname(os.path.abspath(file)),’文件名’)
file_path就是文件的绝对路径
打开文件的时候,遇到with open(‘文件名’,’r’,encoding=’utf-8’) as f:
找不到文件的时候
就可以使用with open(file_path,’r’,encoding=’utf-8’) as f:
用绝对路径代替文件名。
Day10
收获总结
- 第三方库的安装,在anaconda prompt终端中使用pip命令下载,然后在程序中用import调用,因为环境问题,在Windows中的命令终端无法操作,只有在anaconda的终端中才能操作。
- 打开文件的时候,若用open (***)则在最后需要用f.close();若用with open() as f,则不需要f.close().
1
2with open(file_path,'r',encoding='utf-8') as f:
a=f.read()
Day11
收获总结
在需要输入密码的程序中可以用getpass函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import getpass
sender=input('fajian:')
password=getpass.getpass('mima:')
recipients=input('shoujian:')
requests函数和pyquery函数配合使用,requests请求网页,pyquery将抓取网页上的内容。
import requests
r=requests.get('https://mp.weixin.qq.com/s/pLmuGoc4bZrMNl7MSoWgiA')
from pyquery import PyQuery
document=PyQuery(r.text)
content=document('#js_content').text()
<!-- # 用python发邮件的格式: -->
import yagmail
yag=yagmail.SMTP(user=sender,password=password,host='smtp.163.com')
content1=str(a)
yag.send(to=recipients,subject='Day11comevback',contents=content1)a为一个列表,要把a变为一个字符串。
本来可以用b=(‘’.join(a)),但例如本例中列表a内容是[(a,1),(b,2),(c,3)…],这样的元组元素,不能直接转字符串,要使用如下形式:b=(‘’.join(‘%s:%s\n’)%id for id in a);特别要注意join后面的括号中%s的数量等于a每一个元素中的数量。
Day12&13
收获总结
wxpy模块
使用wxpy将python对接到微信,有用。但我使用了19年,17年,13年注册的微信号,都根本登录不了wxpy,没有在网上找到可行的解决方法,只有碰运气,有的老微信号可以。1
2
3
4
5
6# 基本操作
import wxpy
from wxpy import *
bot=Bot()
myself=bot.self
friends=bot.friends()@bot.register 就是每一个功能的实现,在括号中不同参数的调用,对应了不同的对象和功能。例如作业中,实现一个接收 分享 类型的消息,然后使用词频统计的函数,得到结果返回给对方。
1
2
3
4
5
6
7
8
9
10
11
12
def url(msg):
# 从收到的消息(msg,SHARING类型)中抓取到文章内容转变为str格式
r=requests.get(msg.url)
document=PyQuery(r.text)
content=document('#js_content').text()
# 利用stats_word函数中的stats_text.cn/en功能获取词频,排序,及取前多少个词
a=stats_word.stats_text_cn(content)
# 把得到的消息回复给对方
msg.reply(a)
return a
embed()
其中,最关键的是回复函数msg.reply,一开始没用,就什么也没返回。另外friends(自定)=bot.friends()是选定对象,每个@bot.register功能后面的括号里,都要选定对象,没有选定的话,功能无法实现。
- mabplolib库的使用
将day12的词频统计功能使用mabplolib画成一个条形图表:1
2
3
4
5
6
7
8
9
10
11
12
13import matplotlib.pyplot as plt
from matplotlib.pyplot import plot,savefig
plt.rcParams['font.sans-serif']=['SimHei']#这一行使得中文字可以显现
b=Counter(dict(a)) #上个任务中得到的list类型结果,使用这个Counter(dict(a))将其变为Counter形式,也就是一种字典形式
k=list(b)
v=list(b.values()) #这两行是分别取Counter形式的b的key值形成列表k,value值形成列表v*
plt.bar(k,v) #用这两组值形成一个条形图。
plt.xlabel('词语')
plt.ylabel('次数')
plt.title('高频词统计')#给x,y,和总体命名。
plt.show()
plt.savefig('C:\\Users\\Administrator\\Desktop\\a.jpg',bbox_inchs = 'tight')
# 这里是关键,得到了图的结果,但是没有保存,也没有指针,无法引用也无法发回给对方,所以需要使用plt.savefig(路径/文件名.后缀)来保存到本地一个地址。之后的引用需要用这个地址和文件名
将得到的图发还给对方
1 | msg.reply_image('C:\Users\Administrator\Desktop\a.jpg') |
day14 自学训练营总结
经过自学训练的13个任务,我对于编程有了更直观,有效的理解,不同于在学校学习C语音。在学校学习C的时候,完全不理解这是在干什么,只是按照指令,应付考试,考完之后就全忘了。而自学训练营
对于自学,我的感想是,要付诸实践东西,最适合自学的,换个角度说,自学某种技能,最好是要学以致用,首先要明白为什么学,做什么用,然后才可能在使用中强化记忆,最后变成自己的能力。特别是对于编程这样的一种普通人类思维很不熟悉的机器思维,更需要不断练习,要找到可以运用的地方。
我自己经过14天训练营,任务在教练的帮助下基本都能完成,但是除去给我的任务,我还并没有去通过我学到的东西做一些其他工作,写其他的代码,所以我觉得我现在掌握的知识还是很脆弱的,如果不用就会被遗忘。所以我在这个训练营结束之际,还找了一些其他的课程,参加学习,不能忘掉python的基础语法,要赶紧学习python的更多用途。
另外每天的任务给出的参考文档,英文文档我看着实在是太费力了,所以很多时候我都是自己在中文互联网中寻找解决方案,读的都是二手信息。这是这十几天我做的不好的地方,本以为有一定英语基础,但其实根本很难看懂英文文档,想要复习时候索引起来更是不方便,但实际上我知道英文世界的技术交流才是主流,所以想要进入编程领域,也要克服语言问题。
最后我还依然是一个菜鸟,对很多问题还一头雾水,对我所学习的编程还没有一个清楚的感性认识,每次一看网上的交流讨论,看到那些术语名词,非常茫然,另外我对于计算机科学还有一个疑虑:是否应该了解底层原理,再去学习应用功能,我对于计算机和编程语言的底层原理一无所知,我也能学会一些编程技巧,我们是踩着巨人和众人的肩膀上,在编程中我们也不会每个函数都自己写,而是会大量调用别人写好的函数,包,但不了解底层原理,我始终有种恐慌感,不知道是否应该这样。