美文网首页
python第二天

python第二天

作者: code与有荣焉 | 来源:发表于2019-10-22 09:11 被阅读0次

    python中的循环

    1. while循环

    语法格式

    while 循环条件:
        循环体
    

    案例:计算 1到100之间的累加和
    while循环不要忘记i的自身累加

    i = 1
    #累加和的结果
    sum_num = 0
    while i <= 100:
        # 对count进行累加
        sum_num = sum_num + i
        # i = i + 1
        # python中并没有设置i++操作,使用i+=1进行操作
        i += 1
    print(sum_num)
    

    break continue 在循环中的应用

    • break是 跳出本层循环
    • continue是 跳过本次循环(执行下一个循环)

    pass 关键字

    i = 1
    sum_num = 0
    while i <= 100:
        pass # pass 是空语句(占位)
    

    生成一定范围内的随机数

    导入随机数模块
    from random import randint # 左闭右闭
    print(randint(10,15))
    # 验证randint的左闭右闭
    while True:
        print(randint(10,15))
    

    案例:
    需求一:sum_num累加的和大于1000的时候退出循环

    i = 1
    sum_num = 0
    while i <= 100:
        sum_num += i
        if sum_num > 1000:
            # 执行跳出本层循环
            break
        i += 1
    print(sum_num)
    # 1035
    

    需求二:计算1到100之间的奇数和

    i = 1
    sum_num = 0
    while i <= 100:
        # 把所有的偶数都过滤掉 % 代表取余操作
        if i % 2 == 0: # 偶数的时候跳出循环
            i += 1    # (注意这个条件,否则死循环)
            continue
        sum_num += i
        i += 1
    print(sum_num)
    # 2500
    

    猜数字游戏

    需求
    • 在控制台中输入:请给定要猜的最大数字,请给定要猜的最小数字
    • eg: [1,100] 给定数字的区间,电脑在这个区间随机生成一个数字
    • 我们要在1 到100 之间猜出这个数字,因为一次猜对的可能性小,
    • 我们要在每次猜的时候提示猜大了还是猜小了,
    • 如果猜1 次就对,提示你也太厉害了吧,这是高手!
    • 如果猜2-5 次对,提示恭喜你只用了i次就猜对了数字!
    • 如果猜5 次以上,提示,你也太菜了,i 次才能猜的出来,洗洗睡吧!
    自己写的代码(错的)
    from random import randint
    min_num = input('请给定要猜的最小数字:')
    max_num = input('请给定要猜的最大数字:')
    min_num = int(min_num)
    max_num = int(max_num)
    c_num = input('请猜是什么数字:')
    c_num = int(c_num)
    # i是猜的次数
    i = 1
    while True:
        true_num = randint(min_num, max_num)
        if c_num = true_num and i = 1:
            print('你也太厉害了吧,这是高手!')
        i += 1
    
    老师的代码
    from random import randint
    # 最大数字
    max_num = int(input('请给定要猜的最大的数字'))
    # 最小数字
    min_num = int(input('请给定要猜的最小的数字'))
    # 随机生成一个数字,让用户猜这个数字
    generate_num = randint(min_num, max_num)
    count = 0
    while True:
        count += 1
        guess_num = int(input('请输入您要猜的数字'))
        if guess_num < generate_num:
            print('您猜小了')
        elif guess_num > generate_num:
            print('您猜大了')
        else:
            # 猜对的情况
            if count == 1:
                print('你也太厉害了吧,1次就猜对了,高手')
            elif count > 1 and count < 6:
                print('恭喜只用了', count, '次就猜对了数字')
            else:
                print('你也太菜了吧,', count, '次才能猜的出来,嘻嘻睡吧')
            break
    
    

    2. for循环

    语法格式

    for 临时变量 in 可迭代对象: # 可迭代对象:列表,字符串,元祖,集合
        循环体
    

    案例:

    1. 分别取出 neusoft 中的每一个字母
      临时变量不需要提前声明
    name = 'neusoft'
    # 遍历这个单词的每一个字母
    for x in name:
        print(x)
    
    1. 1 到 100 的奇数和 快捷方式
      range(起始位置,终止位置,步长)函数生成的是左闭右开的区间数
    sum_num = 0
    for i in range(1, 101, 2):
        sum_num += i
    print(sum_num)
    
    1. for (int i=0; i<100;i++){
      循环体
      }
      python中如何实现刚才这样的操作呢
    1 到100 的累加和
    sum_num = 0
    for i in range(1, 101):
        sum_num += i
    print(sum_num)
    

    案例:使用for 循环打印九九乘法表

    自己的代码(错的)
    for i in range(1, 10):
        for j in range(1, 10):
            j += 1
        # print(str(i)*str(j)= i*j)  # 怎么输出i*j?
        i += 1    # 逻辑混乱
    
    老师的代码
    for i in range(1, 10):
        for j in range(1, i+1):
            print(j, 'x', i, '=', i*j, '  ', end='')# 默认结尾是换行的,变成不换行的只需要end=''即可
        print()# 换行作用
        # print(end='\n') 等价于 print()
    

    3. python中常用数据类型

    数字(number), 字符串(string), 列表(list), 元组(tuple),字典(dict), 集合(set)

    列表(list)

    python中的列表和c中数组很像, 不同的地方是他可以存储不同的数据类型
    创建第一个列表

    list1 = [1, 2, '张三', '李四']
    print(type(list1))# <class 'list'>
    print(list1)
    

    遍历列表,把元素一个一个取出来

    for 临时变量 in 可迭代对象
    for x in list1:
        print(x)
    

    列表的增删改查

    • 增加操作
    skill_list = []
    for i in range(1, 5):
        skill = '技能' + str(i)# 将数字转化成string类型
        # 向列表的末尾添加元素
        skill_list.append(skill)
    print(skill_list)
    
    • 查询
    # 访问 使用索引进行访问
    # 访问skill_list的第二个元素
    print(skill_list[1])
    
    # 创建一个[0, 1, 2, ...10]的列表
    a = []
    for i in range(0,11):
        a.append(i)
    print(a)
    # 判断a列表中是否有9这个数字
    if 9 in a:
        print('9在a中')
    
    • 删除
    # 删除技能2
    # del 要删除的列表名[索引]
    del skill_list[1]
    print('删除后', skill_list)
    
    • 修改
    # 修改 skill_list最后一个元素的为 垂直打击
    skill_list[2] = '垂直打击'
    print('修改后', skill_list)
    
    元祖(tuple)

    和列表非常相似,只不过不能修改

    # 创建元祖 () 表示元祖
    a = (1, 2, 'lisi')
    print(type(a)) # <class 'tuple'>
    
    # 尝试修改元祖
    # print(a[0])
    # a[0] = 22
    

    元祖既然不能修改,还很列表很相似,要他何用?
    元祖的优点:

    1. 元祖的速度要快于列表
    2. 不能修改,可以带来"写保护",安全
    3. 元祖可以常备作为字典的键使用
    b = () # 创建空元祖
    print(type(b)) # <class 'tuple'>
    c = (22)
    print(type(b))
    print(type(c)) # <class 'int'>
    c = ('55',) # 单元素的元祖要有逗号
    print(type(c)) # <class 'tuple'>
    
    字符串(string)

    字符串创建 可以使用单引号也可以使用双引号
    涉及到引号的嵌套时可采用外层单引号,里层双引号的方式,相反也可

    str1 = 'neuedu'
    str2 = "欢迎来到英雄联盟"
    str3 = '你知道今天是"22"号吗'
    print(str1)
    print(str2)
    print(str3)
    

    len()内置函数

    # 用于检测容器内元素的个数
    print(len(str1))
    

    *操作

    print(str1*3) # neueduneueduneuedu
    # print(str1+3)
    print(str1+str(3)) # neuedu3
    print(str1+'3') # neuedu3
    

    字符串的格式化输出 最流行的是format函数输出
    语法格式

    '{}字符串{}'.format(变量1, 变量2)
    

    案例

    hero = '鲁班七号'
    grade = 13
    print('您当前使用的英雄是{},等级为{}'.format(hero, grade))
    # 您当前使用的英雄是鲁班七号,等级为13
    
    • 字符串的常用操作
    1. replace() 替换
    price = '¥998'
    price = price.replace('¥', '') # 替换完要重新赋值给price
    print(price) # 998
    
    1. strip() 去两端空格 后端常用
    name = ' life is short, use python   '
    print(len(name)) # 29
    name = name. strip()
    print('去空格之后', len(name)) # 去空格之后 25
    
    1. join() 主要应用于把列表变成字符串
    # str_intro = " "
    # str_intro = "_"
    # str_intro = "/"
    # str_intro = "\\"
    li = ['I', 'Love', '王者荣耀']
    # 把 li 变成字符串
    # str4 = str_intro.join(li)
    # print(str4) # C:\User\pyCode
    
    
    print(" ".join(li)) # I Love 王者荣耀
    
    字典(dict)

    使用{}创建字典, 字典中的每一个元素都以键值对的形式存在,中间用冒号隔开
    创建字典

    stu_info = {'name': '刘强东', 'addr': '北京海淀区', 'age': 18}
    

    字典的访问,通过键访问值

    print(stu_info['name']) # 刘强东
    # 解决访问键不存在时报错的情况
    # 当字典中存在这个键的时候,就正常返回该值
    # 当字典中不存在该键的时候,返回none值,并且可以设置默认返回值
    print(stu_info.get('sex', 'female'))
    

    字典的修改,访问键然后赋值

    stu_info['age'] = 50
    print('修改之后的值', stu_info) # 修改之后的值 {'name': '刘强东', 'addr': '北京海淀区', 'age': 50}
    # 增加 当字典中不存在这个键的时候,就是相当于往字典里添加了元素
    stu_info['sex'] = 'female'
    print('增加后', stu_info) # 增加后 {'name': '刘强东', 'addr': '北京海淀区', 'age': 50, 'sex': 'female'}
    

    删除

    # del 字典['键']
    del stu_info['sex']
    print('删除后', stu_info)
    
    • 字典常用操作
    # 返回字典所有的键 k
    print(stu_info.keys())
    # 返回字典中所有的值 v
    print(stu_info.values())
    # 返回所有的键值对
    # 返回形式是列表,列表中的每一个元素都是一个元祖
    print(stu_info.items()) # dict_items([('name', '刘强东'), ('addr', '北京海淀区'), ('age', 18)])
    
    stu_info_list = stu_info.items()
    # 转化成字典
    print(dict(stu_info_list)) # {'name': '刘强东', 'addr': '北京海淀区', 'age': 18}
    
    # 字典的遍历输出
    for k,v in stu_info.items():
        print(k, ':', v) 
    '''name : 刘强东
    addr : 北京海淀区
    age : 18'''
    
    集合(set)

    可以用于去重
    也使用{}表示,只不过{}中没有元素时代表的是空字典
    特点:无序,不重复

    set1 = {'zhangsan', 123, 666}
    print(type(set1)) # <class 'set'>
    
    # 集合的遍历
    for x in set1:
        print(x)
    

    小结:python中常用数据类型:字符串, 数字, 列表[],元祖(), 字典{:,:}, 集合{}

    4. 中文分词

    英文单词由于单词之间是有空格的,所以不需要分词,中文则不同
    这就需要我们使用第三方库来进行分割
    jieba结巴分词是目前最流行的中文分词库

    安装jieba分词

    pip install jieba
    

    导入jieba

    import jieba
    
    • 目前导入模块的方式有两种
    1. import 模块名字
    import turtle
    import jieba
    
    1. from 模块 import 对象或者函数(你需要的就导入,不需要就不用导入,可以同时导入多个)
    from random import randint, random
    # 等价于
    # import random
    # random.randint()
    
    • 结巴分词的特点,支持三种模式
    1. 精确模式 将字符串分割成等量的中文 最常用的模式
    seg = '我来到北京清华大学'
    seg_list = jieba.lcut(seg)
    print(seg_list) # ['我', '来到', '北京', '清华大学']
    
    1. 全模式
    # cut_all 参数用来控制是否采用全模式
    # 将字符串中所有的分词结果都列举出来,
    # 特点,全,  缺点,冗余性大
    seg_list1 = jieba.lcut(seg, cut_all=True)
    print(seg_list1) # ['我', '来到', '北京', '清华', '清华大学', '华大', '大学']
    
    1. 搜索引擎模式
    # 首先执行精确模式,然后对其中的长词进一步切分得到的结果
    # 该模式更倾向于寻找短词语,这种方式具有一定的冗余度,但是比全模式要少
    seg_list2 = jieba.lcut_for_search('小明硕士毕业于中国科学技术大学,后在日本京都大学深造')
    print(seg_list2) # ['小明', '硕士', '毕业', '于', '中国', '科学', '技术', '科学技术', '大学', ',', '后', '在', '日本', '京都', '大学', '日本京都大学', '深造']
    seg_list3 = jieba.lcut('小明硕士毕业于中国科学技术大学,后在日本京都大学深造', cut_all=True)
    print(seg_list3) # ['小', '明', '硕士', '毕业', '于', '中国', '科学', '科学技术', '技术', '大学', '', '', '后', '在', '日本', '日本京都大学', '京都', '京都大学', '大学', '深造']
    
    
    • 总结:如何选择模式:
    1. 如果希望对文本词分词准确,不产生冗余 ---> 精确模式
    2. 如果希望对文本词分词更为准确,不漏掉任何分词的可能---> 全模式
    3. 如果没想好怎么用,可以使用搜索引擎模式

    相关文章

      网友评论

          本文标题:python第二天

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