咳咳, 先承认个错误, 周六的时候说晚上 准备接着写的 但是刷知乎刷的太晚了 就没有写, 周日的时候 直接就没有写. 所以决定 如果没有学习的情况下,周六日就不写了, 如果有学习,晚上会补.
---------------------------------------------(请叫我万恶的分割线)----------------------
好了闲话不说,先来一波笔记: 哈哈哈, 不知道为啥,每次从 txt里把文本复制过来的时候, txt里面的缩进就没有了- - 比较蓝瘦
一, 上周内容回顾
1, python是一门解释性,弱类型语言
2,变量的命名规范: 8点
3,基本数据类型: int(整数) bit_length() 转换成二进制的位数
str(字符串)操作:(详见博客,第三篇); 字符串的组成: '', ''' ''', "", """ """; 字符串不可变:任何操作都不会影响原字符串
bool:True False (布尔值): bool=> int; bool=>str;
4, if 条件判断
5, while 循环
6, break : 结束循环 continue: 结束本次循环,开始下次循环
7,编码:
ASCII. 8bit 1byte
gbk: 16bit 2byte
Unicode: 32bit 4bite
utf-8: 英文8bit 1byte 中文:24bit 3byte
8, 运算符:
and: 两边都是真,结果才是真
or: 有一个为真,即为真
not: 非真即假
not => and => or
二, 作业:
作业,在上周五写的时候,遇到的问题已经记录了, 这里就不作重复了
三,今天主要内容: 基本数据类型:
1,列表(list): 可以装很多数据的集合,用[] 组成,里面的内容每一项用 ',' 逗号隔开. 并且 列表中可以放任何数据类型的数据; list() 是一个内置函数, 尽量不要用他来作为变量名
列表的索引: 和字符串的索引用法一样, 只不过,这里 是索引的 列表中的 数据, 不是单个字符
列表的切片: 和字符串用法一样 切记: 顾头不顾尾 切完后得到 的还是list(列表)
2,列表的增删改查
1, 增:
list.append():追加, 在最后一位追加
list.insert(参数1, 参数2) :插入: 参数1 = 索引位置 , 参数2 = 需要添加的东西 (效率略低): 如果,参数1 大于 原来list的最大索引值 那么,参数2 添加到最后.
list.extend(参数): 参数=可迭代的数据 放进去字符串,会迭代字符串,把字符串的每一项拿出来 添加到后面.
小结:
1,list是可迭代对象
2,字符串转换成列表用, list.extend(str)
3,list的用法,返回的是None 必须从新在print(list)
2, 删:
list.pop(): 删除最后一个元素,或者,指点索引位置的内容(默认参数为索引-1) 并且返回删除的元素.
list.remove(参数):删除指定元素,返回None 参数=元素
list.clear(): 清空列表.返回None
del list[] :切片删除, del 是一个关键字 注意用法
3, 改:
list[索引] =参数1: 把索引位的元素 改成 参数1
list[切片] = 参数1: 参数1 必须是可迭代对象. 把切片里的元素删掉 换成 参数1迭代后的 元素; ****注意: 如果步长不是1, 元素个数必须匹配****
4, 查: list是一个可迭代的对象, 用for循环来查
5, 常见操作: list.count(): 数数
list.stor(参数1, 参数2)排序. 默认升序: 从小到大. 参数1= , 参数2 = ( reverse=True(降序) ) 默认 reverse=False. 字符串排序是 按照相同位置 进行排序; 中文的话, python比较任性, 中文尽量还是不要排序了 比较乱.
list.reverse() : 反转: 整个 全部反转
3,列表的嵌套
列表中放列表; 降维操作
4,元组(tuple)和元组的嵌套
元组是 只读列表, 可以循环, 索引, 切片, 就是不能增 删 改.
元组用 小括号() 来表示,如果 只有一个元素,那么元组必须添加一个逗号(1,)
5,range: 可以帮我们获取一组数据,通过for 循环能够获得这些数据. range(参数1,参数2,参数3) 参数1 = start, 参数2 = end, 参数3 = step步长. 切片操作, 顾头不顾腚
上面的是知识点, 本来该闲谈了,但是我觉得有必要,把今天作业的两道题先拿出 说一下, 这两道题让我花了好长时间才写出来, 而且最后一道题的答案就我自己感觉来说,还不是很满意:
请看下面的一波代码:
1 ''' 2 12,开发敏感词语过滤程序,提示用户输入评论内容,如果用户输入的内容中包含特殊的字符: 3 敏感词列表 li = ["苍老师", "东京热", "武藤兰", "波多野结衣"] 4 则将用户输入的内容中的敏感词汇替换成等长度的*(苍老师就替换***),并添加到一个列表中;如果用户输入的内容没有敏感词汇,则直接添加到上述的列表中。 5 ''' 6 li = ["苍老师", "东京热", "武藤兰", "波多野结衣"] 7 li2 = [] 8 while 1: 9 n = 0 10 users = input('请输入您的评论,输入回车结束程序') 11 if not users: 12 break 13 for i in li: 14 if li[n] in users: 15 if n != 3: 16 users = users.replace(li[n],'***') 17 else: 18 users = users.replace(li[n],'*****') 19 else: 20 n +=1 21 continue 22 n+=1 23 li2.append(users) 24 print('下面是您所有输入过的评论') 25 print(li2)
分析过程:
做题我觉得应该就是做项目的前身,所以就目前来说,我还是很喜欢做题的. 拿到这道题先分析, 这道题首先需要用户输入评论,所以要用 input, 同时还要求将敏感词汇打*号, 一共有4个敏感词汇,还要把不同的敏感词汇打上不同数量的*; 看着就蛮难的.
先写个循环和退出循环,等着待会测试的时候方便.
li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
while 1:
n = 0
li2 =[] user = input('输入评论(输入回车退出程序):') if not user: break
这个在上回的时候讲了,应该能看懂把. 然后接下来把 列表弄上,然后在用for循环把 列表 li 循环带入到 user里面,进行判断,是否 列表 li 里面的敏感词汇在user里面, 如果在,则打*号,可是这个时候问题来了,怎么判断是那个 敏感词呢? 该打几个*号呢? This is a question.让我们好好想想. 如果我们用索引来把每一个敏感词带入怎么样?来 写写代码试试
# 接上面的代码一起看哦
for i in li:
if li[n] in user:
user.replace(li[n],'***')
n += 1
这么写的话,我觉的不还不错哦基本上,我们可以把列表li [0:3] 前三个元素可以都改成 *** 了,但是这样的代码,就又出现了两个问题,
1, 不能把''波多野结衣'' 老师改成 ''*****'' 大不敬啊这是, 待会再说这个问题哈.
2,因为字符串不支持更改的设置, 这样导致, 每一次循环只替换三个字, 而我们想要的效果应该 如果有多个相同或者多个不同的敏感词的时候 要全部都替换掉,很明显上面的代码做不到. 但是怎样才能解决这个问题呢? 我选择的是 在重新给user 赋值,让下次循环的时候 把敏感词带入到 已经打过一次***号的 字符串里面.
把 user.replace(li[n],'***') 变成 user = user.replace(li[n],'***'). 不知道各位大神 有没有跟我用的一样的办法.哈哈哈
然后我们再来看第一题,如何 给与波老师 最大尊敬? 如果我们在判断 敏感词是否存在 user里 之后在判断一下 n 怎么样? 比较 像波老师这样的 只有一个, 我觉的还不错哦, 来 写写代码试试:
# 接上上面的代码一起看
for i in li:
if li[n] in user:
if n == 3:
user = user.replace(li[n],'***')
else:
user = user.replace(li[n],'*****')
else: # 判断 如果没有敏感词的 n+1 并且跳过循环.
n += 1
continue
n += 1
# 基本上到这里的时候代码就接近结束了, 而且后面的没啥值得注意的,所以我就在这直接补完后面的代码了
li2.append(user) # 把打了*的放到空列表li2里面
print(li2) # 大概就这些, 有问题可以私下找我哦, 找不到那就在下面留言把....
这个题 到目前为止,还是可以继续优化的,但是本人比较懒,等碰到这样的问题的时候,在来优化 哈哈哈哈哈. 就目前的这种代码,我还是比较满意的,简单,逻辑还是相对来说比较清晰
另一道题:
1 ''' 2 13,有如下列表 3 li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"] 4 循环打印列表中的每个元素,遇到列表则再循环打印出它里面的元素。 5 我想要的结果是: 6 1 7 3 8 4 9 "alex" 10 3 11 7, 12 8 13 "taibai" 14 5 15 ritian 16 17 18 ''' 19 20 li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"] 21 for i in li: 22 i2 = str(i).lower() 23 if i == [3, 7, 8, "TaiBai"]: 24 for i3 in i: 25 print(str(i3).lower()) 26 else: 27 print(i2)
题意我就不说了,直接说我自己想法:
一开始的时候,我想用 type()来判断 i 是不是list 如果是,则,再来一次for循环, 但是经过试验, type() 得到的是一个 <> 这个是个什么鬼? 做不了判断,所以就换成了上面那个简单的算法...刚才问了下老师,老师说用 str()把type 变成字符串来用, 但是 题里面报错了,等会,我再去试试. 上面的那个简单的算法应该不用说了吧- -
这就是今天的作业,就先写到这里,我先去研究研究那个 str() 然后会来再补
接下来就是闲聊了 哈哈哈: