美文网首页
Python学习第二天

Python学习第二天

作者: 乡村蝙蝠侠 | 来源:发表于2019-07-23 20:27 被阅读0次

    GUI界面安装第三方库

    • 快捷键ctrl+alt+s
    • 点击project
    • 点击右上角加号进行安装

    如何获取文件的路径

    • 右键想要获取路径的文件,点击Copy relative path,即复制成功

    读取txt文件

    当前文件夹 /代表文件夹之间的分割
    mode='r' 代表只读的方式
    案例:

    f=open(file='./threekingdom.txt',mode='r',encoding='UTF-8')
    words=f.read()
    print(words)
    print(type(words))
    #关闭流
    f.close()
    print(len(words))
    
    image.png

    即输出txt内容以及类型和字节。

    import语句

    在开始使用一个模块中的函数之前,必须用import语句导入该模块。
    结构格式:
    from 模块名 import name1,name2
    例如:
    from random import randint
    等效于
    import random
    random.randint

    如何绘制一个简单的词云

    案例:

    from wordcloud import WordCloud
    
    #如何绘制一个简单的词云
    #1、英文词云
    #类
    txt='i like python,python is the best project language in the world'
    wc=WordCloud().generate(txt)
    wc.to_file('python.png')
    

    输出结果:


    python.png

    绘制三国小说词云

    案例:

    #@file:绘制三国小说词云.py
    #@Software: PyCharm
    import jieba
    from wordcloud import WordCloud
    import imageio
    #1.读取三国这本小说
    #使用with 上下文管理器进行本地文件读取 不用手动关闭流
    mask = imageio.imread('china.jpg')
    with open('threekingdom.txt','r',encoding='UTF-8')as f:
        words=f.read()
        # print(words)
    
    #2.对小说字符串进行分词
    words_list=jieba.lcut(words)
    print(words_list)
    #把返回的分词流标转换成字符串
    words_text=' '.join(words_list)
    print(words_text)
    #3.使用WordCloud进行绘制
    WordCloud(
        background_color='white',
        width=800,
        height=600,
        font_path='msyh.ttc',
        mask=mask
    ).generate(words_text).to_file('三国词云.png')
    

    输出结果:


    三国词云.png

    常用的排序方法

    案例:

    li = []
    for i in range(10):
        li.append(i)
    print(li)
    
    from random import shuffle
    shuffle(li)
    print('顺序打乱后', li)
    
    # 第一种排序方式
    li.sort(reverse=True)
    
    print('排序后的列表', li)
    

    输出结果:


    image.png

    字典排序

    首先创建一个字典,如下:
    案例:

    stu_info = [
        {'name':'zhangsan', 'age':33},
        {'name':'lisi', 'age':8},
        {'name':'wangwu', 'age':66},
        {'name':'tianqi', 'age':17},
    ]
    
    print(stu_info)
    
    • 按年龄倒序输出
      案例:
    stu_info = [
        {'name':'zhangsan', 'age':33},
        {'name':'lisi', 'age':8},
        {'name':'wangwu', 'age':66},
        {'name':'tianqi', 'age':17},
    ]
    
    print(stu_info)
    # def 函数名():
    #     函数体
    def sort_by_age(dict_info):
        return dict_info['age']
    #
    # 按照年龄进行倒序排序
    # key是接受一个函数名  用于指定 按照什么进行排序
    #
    stu_info.sort(key=sort_by_age,reverse=True)
    print('排序后', stu_info)
    

    输出结果:


    image.png

    *按姓名倒序输出
    案例:

    stu_info = [
        {'name':'zhangsan', 'age':33},
        {'name':'lisi', 'age':8},
        {'name':'wangwu', 'age':66},
        {'name':'tianqi', 'age':17},
    ]
    
    print(stu_info)
    def sort_by_name(dict_info):
        return dict_info['name']
    
    
    stu_info.sort(key=sort_by_name,reverse=True)
    print('按照名字排序后', stu_info)
    

    输出结果:


    image.png

    元组按序输出

    stu_info = [
        ('zhangsan', 89),
        ('lisi', 7),
        ('wangwu ', 222),
        ('zhaoliu', 44)
    ]
    print(stu_info)
    def sort_by_tuple(x):
        return x[1]
    
    stu_info.sort(key=sort_by_tuple)
    
    print('排序后', stu_info)
    

    输出结果:


    image.png

    交换两个变量

    在C语言中交换两个变量需要引入中间变量进行交换,在python中要简单的多。
    在C语言中交换两个变量如下所示:
    int a=10
    int b=100
    temp=a
    a=b
    b=temp
    python中交换两个变量代码如下:
    案例:

    a=10
    b=100
    a,b=b,a
    print('a=',a)
    print('b=',b)
    

    输出结果:


    image.png

    可以看出,C语言中三行代码在Python中只需要一行代码就可以解决。

    一次声明多个变量

    案例:

    c,d,e=100,[90,33],'hehe'
    print(c)
    print(d)
    print(e)
    

    输出结果:


    image.png

    函数和lambda表达式

    案例:

    def 函数名():
        print(('haha'))
        pass#站位
    #调用
    函数名()
    

    输出结果:


    image.png

    1~num之间的累加和

    案例:

    def caculate_num(num):
       result=0
       for i in range(num+1):
           result +=i
       return result
       pass
    sum_num=caculate_num(100)
    print(sum_num)
    

    输出结果:


    image.png

    函数和方法:没区别
    函数是针对于面向过程
    方法是面向对象

    匿名函数

    lambda 参数1 ,参数2。。。。。。。:表达式

    • 案例1:
    pingfang=lambda n:n*n
    add=lambda x,y:x+y
    print(add(3,4))
    print(pingfang(7))
    

    输出结果:


    image.png
    • 案例2:
    stu_info = [
        {'name':'zhangsan', 'age':33},
        {'name':'lisi', 'age':8},
        {'name':'wangwu', 'age':66},
        {'name':'tianqi', 'age':17},
    ]
    stu_info.sort(key=lambda x:x['age'])
    print('排序后',stu_info)
    

    输出结果:


    image.png
    • 案例3:
    stu_info = [
        ('zhangsan', 89),
        ('lisi', 7),
        ('wangwu ', 222),
        ('zhaoliu', 44)
    ]
    stu_info.sort(key=lambda x:x[1])
    print('排序后',stu_info)
    #或者(输出结果相同)
    #stu_info=sorted(stu_info,key=lambda x:x[1])
    #print(stu_info)
    

    输出结果:


    image.png

    .sort()和sorted 的区别

    • .sort()是列表特有的方法,sorted适用于任何可迭代对象
    • .sort()是在原来的列表上进行修改,sorted()是返回一个新的列表
    • 调用形式不一样

    列表推导式

    • 案例1(0到9):
    # 生成一个[0,1,......9]
    li=[]
    for i in range (20):
        li.append(i)
    print(li)
    

    输出结果:


    image.png
    • 案例2(偶数):
    li=[]
    for i in range (20):
        li.append(i)
    print(li)
    #筛选出所有的偶数
    new_li=[]
    for i in li:
        if i%2==0:
            new_li.append(i)
    print(new_li)
    #或者(输出结果相同)
    #li3=[i for i in range(20) if i%2==0]
    #print(li3)
    

    输出结果:


    image.png
    • 案例3(正负随机数):
    li=[]
    for i in range (20):
        li.append(i)
    print(li)
    #生成正负随机的列表
    from random import randint
    li5=[]
    for _ in range(10):
        li5.append(randint(-20,20))
    print(li5)
    

    输出结果:


    image.png
    • 案例4(列表推导式):
    li2=[i for i in range(10)]
    print(li2)
    

    输出结果:


    image.png
    • 案例5(使用列表推导式完成案例3):
      使用列表推导式
      语法结构:
      [表达式for 临时变量 in 可迭代变量 筛选条件]
    # 使用列表推导式生成li5
    from random import randint
    li5=[randint(-20,20) for _ in range(10)]
    print(li5)
    

    输出结果:


    image.png
    • 案例6(筛选案例4中大于零的数):
    li=[]
    for i in range (20):
        li.append(i)
    print(li)
    #生成正负随机的列表
    # 使用列表推导式生成li5
    from random import randint
    li5=[randint(-20,20) for _ in range(10)]
    print(li5)
    #筛选所有大于零的
    res_list=[x for x in li5 if x>0]
    print(res_list)
    

    输出结果:


    image.png

    切片(Python中的特色 slice)

    案例:

    name='abcdefg'
    #左闭右开
    #获取abc
    print(name[0:4])
     #a c e f
    print(name[0:8:2])
    print(name[::2])
    #name
    print(name[::])
    #name进行反转 gfdecba
    print(name[::-1])
    #g e c a
    print(name[::-2])
    #f d b
    print(name[-2::-2])
    # 起始值终止值 可以省略
    

    输出结果:


    image.png

    字符串输出

    案例:

    i=2
    grade='十五'
    print('这是我们上课的第{}天,我的修炼等级达到了{}级别'.format(i,grade))
    

    输出结果:


    image.png

    对分析的数据进行可视化展示

    bar pie scatter plot
    as 还是起别名
    名字来源于matlab
    案例:

    from matplotlib import pyplot as plt
    plt.rcParams["font.sans-serif"] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    # 绘制条形图
    import string
    print(string.ascii_uppercase)
    
    x=["厂商{}".format(i) for i in string.ascii_uppercase [:5]]
    print(x)
    from random import randint
    y=[randint(200,300) for _ in range(5)]
    print(y)
    #绘制 条形图
    plt.bar(x,y)
    plt.show()
    

    输出结果:


    image.png image.png

    将三国人物出场TOP10输出条形图

    import jieba
    from wordcloud import WordCloud
    #1、读取文件
    with open('threekingdom.txt','r',encoding='UTF-8')as f:
        words=f.read()
        word_list=jieba.lcut(words)
        excludes = {"将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议",
                    "如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下",
                    "东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",
                    '孔明曰', '玄德曰', '刘备', '云长'}
        # print(word_list)
        # print(len(word_list))
        #定义一个字典{‘夏侯渊’:788,‘不来’:56}
        counts={}
        for word in word_list:
    
        #删除靠前与人名无关的词汇
            if len(word)==1:
                continue
            else:
        #往字典里添加元素
        # count[word]=取出字典中原来的计数+1
        # count[word]=count[word]+1
                counts[word]=counts.get(word,0)+1
        # print(counts)
        counts['孔明']=counts['孔明曰'] + counts['孔明']
        counts['玄德']=counts['玄德曰'] + counts['玄德'] + counts['刘备']
        counts['关公']=counts['关公'] + counts['云长']
        #将counts转化成列表
        for word in excludes:
            del counts[word]
        items=list(counts.items())
    
        def sort_by_count(x):
            return x[1]
        items.sort(key=sort_by_count,reverse=True)
        # print(items)
        # 显示计数前20词语
        role_list=[]
        for i in  range(10):
            #拆包 序列解包
            role_name,count=items[i]
            print(role_name,count)
            #给读代码的人看的,_代表并没有使用临时变量
        #     for _ in range(1):
        #         role_list.append(role_name)
        # # print(role_list)
        # text=' '.join(role_list)
        # WordCloud(
        #     background_color='white',
        #     width=800,
        #     height=600,
        #     font_path='msyh.ttc',
        #     #相同匹配词的处理
        #     collocations=False
        # ).generate((text)).to_file('top10.png')
    
        import  matplotlib.pyplot as plt
        plt.rcParams["font.sans-serif"] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        # print(items)
        print(items[0:10:1])
        dict1=dict(items[0:10:1])
        print(dict1)
    
        x = ["{}".format(i) for i in dict1.keys()]
        print(x)
        y = [i for i in dict1.values()]
        print(y)
        # 绘制 条形图
        plt.bar(x, y)
        plt.show()
    

    输出结果:


    image.png

    相关文章

      网友评论

          本文标题:Python学习第二天

          本文链接:https://www.haomeiwen.com/subject/uvzalctx.html