oldboy fifth day . I love Python. list, tuple 列表 元组的用法:

  咳咳, 先承认个错误, 周六的时候说晚上 准备接着写的 但是刷知乎刷的太晚了 就没有写, 周日的时候 直接就没有写. 所以决定 如果没有学习的情况下,周六日就不写了, 如果有学习,晚上会补.

---------------------------------------------(请叫我万恶的分割线)----------------------

好了闲话不说,先来一波笔记: 哈哈哈, 不知道为啥,每次从 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() 然后会来再补


接下来就是闲聊了 哈哈哈:

猜你喜欢

转载自www.cnblogs.com/Fushengliangnian/p/9134855.html