1901100167-自学训练营18群-Python入门

学员信息

  • 姓名:徐响
  • 学号:1901100167
  • 学习内容:Python 14 天入门
  • 学习用时:未知

学习笔记


Day1-9

收获总结

  1. print(‘%s%s=%s’%(x,y,xy),end=’\t’)
    在这种print函数中,前面字符串中%s会一一对应后面%()中的元素。后面的end=‘\t’可以把每个结果之间以空格分开。
  2. num1 =int(input(“number1:”))
    input接受键盘输入的内容,括号里的字符串为提示字符串。
  3. range函数和for while一样也是循环
    range(x):从0到x每次加1
    range(x,y):从x到y加1
    range(x,y,z):从x到y依次加z
  4. 列表函数,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维的所有数据
    数制:
  5. 进制转换
    Int() 十进制
    Bin() 二进制
    Oct() 八进制
    Hex() 十六进制
  6. 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)
    这两个都可以排序。
  7. collections.Counter
    但后面知道更好的是用标准库中的collections中的Counter函数来实现排序
    c=Counter(dic[])
    c=Counter(‘str’) ##可以用各种格式,str,dict,set,tuple等等来输入Counter
    其中可以使用most_common(‘填写限制个数’)
    replace函数可以用来替换字符串中的指定字符
    如text=text.replace(‘better’,’worse’)
  8. 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()函数还可以将字符串或者元组转换成列表。
  9. sys模块
    让模块可用
    import sys
    sys.path.append(‘路径’)
    from xxximport stats_word
    sys.path包含一个目录(以字符串形式)列表,解释器就在这些目录中寻找模块。
    Sys.path.append添加目录
  10. 异常捕捉
    异常,用途是使某些错误操作不至于导致程序整体崩溃,提出修改意见,保留修改的空间,
    Raise exception/TypeError/等等()
    括号里可以写上提示语句。
    在函数里用了raise里之后,在调用这些函数的时候,使用try/except/else/finally
    捕获这些错误,再做其他处理
  11. 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

收获总结

  1. 第三方库的安装,在anaconda prompt终端中使用pip命令下载,然后在程序中用import调用,因为环境问题,在Windows中的命令终端无法操作,只有在anaconda的终端中才能操作。
  2. 打开文件的时候,若用open (***)则在最后需要用f.close();若用with open() as f,则不需要f.close().
    1
    2
    with open(file_path,'r',encoding='utf-8') as f:
    a=f.read()

Day11

收获总结

  1. 在需要输入密码的程序中可以用getpass函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import 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)
  2. 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

收获总结

  1. 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
    @bot.register(friends,SHARING)
    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功能后面的括号里,都要选定对象,没有选定的话,功能无法实现。

  1. mabplolib库的使用
    将day12的词频统计功能使用mabplolib画成一个条形图表:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import 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的更多用途。

  • 另外每天的任务给出的参考文档,英文文档我看着实在是太费力了,所以很多时候我都是自己在中文互联网中寻找解决方案,读的都是二手信息。这是这十几天我做的不好的地方,本以为有一定英语基础,但其实根本很难看懂英文文档,想要复习时候索引起来更是不方便,但实际上我知道英文世界的技术交流才是主流,所以想要进入编程领域,也要克服语言问题。

  • 最后我还依然是一个菜鸟,对很多问题还一头雾水,对我所学习的编程还没有一个清楚的感性认识,每次一看网上的交流讨论,看到那些术语名词,非常茫然,另外我对于计算机科学还有一个疑虑:是否应该了解底层原理,再去学习应用功能,我对于计算机和编程语言的底层原理一无所知,我也能学会一些编程技巧,我们是踩着巨人和众人的肩膀上,在编程中我们也不会每个函数都自己写,而是会大量调用别人写好的函数,包,但不了解底层原理,我始终有种恐慌感,不知道是否应该这样。