python第二天

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))# 
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)) # 

# 尝试修改元祖
# print(a[0])
# a[0] = 22

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

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

# 集合的遍历
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第二天)