码农学技术————六个月学习python全栈【Day07】

今日学习目标:

  • 理解运用字符串的其他内置方法
  • 理解运用列表内置方法
  • 理解补充知识点

今日学习内容:

内容简要:

  • 字符串的其他内置方法(剩余部分)
  • 列表内置方法
  • 补充知识点

内容详细:

字符串的其他内置方法(剩余部分)

前一部分请见我上一篇[博客]

  • 1.移除字符串首尾的指定字符 可以选择方向

    用法举例

    
    str1 = '**jason***'
    
    print(str1.strip('*'))  # 移除左右两边的指定字符
    print(str1.lstrip('*'))  # 只移除左边的指定字符
    print(str1.rstrip('*'))  # 只移除右边的指定字符
    
    

    运行结果
    在这里插入图片描述

  • 2.大小写相关操作

    用法举例

    str2 = 'My nAme is tonY!'
    
    print(str2.lower())  # 将英文字符串全部变小写
    print(str2.upper())  # 将英文字符串全部变大写
    

    运行结果
    在这里插入图片描述

    扩展补充

    • 判断字符串中所有的英文字母是否是纯小写或纯大写
      用法举例

      str2 = 'My nAme is tonY!'
      
      print(str2.islower())  # 判断字符串中所有的英文字母是否是纯小写  结果是布尔值
      print(str2.isupper())  # 判断字符串中所有的英文字母是否是纯大写  结果是布尔值
      

      运行结果
      在这里插入图片描述

      为什么以前的认证码需要一模一样 大小写不能忽略 现在的验证码却可以 如何实现

      ***************************
       code = 'JaSOn6'
       print('这是返回给用户的图片验证码:%s' % code)
       user_code = input('请输入验证码>>>:').strip()
       if code.lower() == user_code.lower():  # 验证码忽略大小写 只需要统一转大写或者小写即可
           print('验证码正确')
       ***************************
      
  • 3.判断字符串的开头或者结尾是否是指定的字符

    用法举例

    str3 = 'tony jam'
    
    # startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
    print(str3.startswith('t'))
    print(str3.startswith('j'))
    
    # endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
    print(str3.endswith('jam'))
    print(str3.endswith('tony'))
    
    

    运行结果
    在这里插入图片描述

  • 4.格式化输出

      1.方式1 占位符:%s %d
    

    详细用法见我之前【博客】

      方式2 format方法>>>:四种用法
    
    用法举例
    占位符一致 使用的{}占位print(‘my name is {} my age is {}’.format(‘jason’, 18))
    据索引取值 可以反复使用print(‘my name is {0} {0} {0} my age is {0} {1}’.format(‘jason’, 18))
    据指名道姓的方式取值print(‘my name is {name} {name} my age is {age} {pwd}’.format(name=‘jason’, age=18, pwd=123))
    接使用已经出现过的变量name = ‘jason’ age = 18 print(f’my name is {name} my age is {age} {name} {age}’)

    用法举例

    
    # 玩法1:跟占位符一致  使用的{}占位
    print('my name is {} my age is {}'.format('jason', 18))
    
    # 玩法2:根据索引取值  可以反复使用
    print('my name is {0} {0} {0} my age is {0} {1}'.format('jason', 18))
    
    # 玩法3:根据指名道姓的方式取值
    print('my name is {name} {name} my age is {age} {pwd}'.format(name='jason', age=18, pwd=123))
    
    # 玩法4:直接使用已经出现过的变量
    name = 'jason'
    age = 18
    print(f'my name is {name} my age is {age} {name} {age}')
    
    

    运行结果
    在这里插入图片描述
    python官网很久以前就说推荐使用format做格式化输出 甚至说%s要被砍掉

  • 5.拼接字符串

    方式举例
    s1 + s2(如果字符串很大 加号效率较低)$1600
    s1 * 10()重复次数$12
    ‘拼接的字符’.join(被拼接的字符串)$1

    用法举例

    s1 = '三月不努力 四月变垃圾'
    s2 = '年少不努力 妄为少年人'
    s3 = '2'
    print(s1 + s2)
    print(s3 * 10)
    print('|'.join(s1))
    print('$'.join(['jason', 'kevin', 'justin', 'tony']))
    

    运行结果
    在这里插入图片描述

    join方法相当于是将括号内的元素进行for循环,所以 join的元素必须都是字符串才可以 否则报错

  • 6.替换字符串中指定的字符

    用法举例

    str7 = 'my name is tony, my age is 18!'  # 将tony的年龄由18岁改成73岁
    str7 = str7.replace('18', '73')  # 语法:replace('旧内容', '新内容')
    print(str7)
    # 可以指定修改的个数
    str7 = 'my name is tony, my age is 18!'
    str7 = str7.replace('my', 'MY', 1)  # 只把一个my改为MY
    print(str7)
    

    运行结果
    在这里插入图片描述

  • 7.判断字符串中是否是纯数字

    用法举例

    # 判断字符串是否是纯数字组成,返回结果为True或False
    str8 = '5201314'
    print(str8.isdigit())
    
    str8 = '123g123'
    print(str8.isdigit())
    
    

    运行结果
    在这里插入图片描述

下面方法使用频率低,只做了解

  • 1.查找指定字符对应的索引值

    方式区别
    要查找的字符串.find(‘查找的字符’) #从左往右查找 查找一个就结束print(s1.find(‘k’, 1, 9)) # -1 意思是没有 找不到
    要查找的字符串.index(‘查找的字符’)print(s1.index(‘k’, 1, 9)) # 找不到直接报错 不推荐使用

    用法举例

    s1 = 'jason justin kevin tony'
    print(s1.find('s'))
    print(s1.find('k', 1, 9))
    print(s1.index('s'))
    print(s1.index('k', 1, 9))  
    
    

    运行结果
    在这里插入图片描述

  • 2.文本位置改变

    语法举例
    改变的字符串.center(添加的字符个数,添加的字符)name = ‘tony’ print(name.center(30, ‘-’))
    改变的字符串.ljust(添加的字符个数,添加的字符)name = ‘tony’ print(name.ljust(30, ‘*’))
    改变的字符串.rjust(添加的字符个数,添加的字符)name = ‘tony’ print(name.rjust(30, ‘$’))
    改变的字符串.zfill(添加的字符个数,添加的字符)name = ‘tony’ print(name.zfill(50))

    用法举例

    name = 'tony'
    print(name.center(30, '-')) 
    print(name.ljust(30, '*'))
    print(name.rjust(30, '$'))
    print(name.zfill(50))
    

    运行结果
    在这里插入图片描述

  • 3.特殊符号:斜杠与一些英文字母的组合会产生特殊的含义

    样式含义
    \n表示换行符,换到下一行的开头。
    \a特殊符号,占位符
    \t表示制表符,将光标移到下一个制表符的位置,就像在文档中用tab键一样

    用法举例

    print('ja\tson\nke\avin')
    '''
    结果
    ja	son
    kevin
    '''
    
  • 4 captalize:首字母大写
    用法举例

     message = 'hello everyone nice to meet you!'
     message.capitalize()
    # Hello everyone nice to meet you!
    

    运行结果

  • 5.swapcase:大小写翻转
    用法举例

     message1 = 'Hi girl, I want make friends with you!'
     message1.swapcase()
    # hI GIRL, i WANT MAKE FRIENDS WITH YOU!
    

    运行结果

  • 6 title:每个单词的首字母大写
    用法举例

     msg = 'dear my friend i miss you very much'
     msg.title()
    # Dear My Friend I Miss You Very Much
    

列表内置方法

  • 1.类型转换

    用法举例

    print(list(11))  # 不行
    print(list(11.11))  # 不行
    print(list('jason'))  # ['j', 'a', 's', 'o', 'n']
    print(list({'name': 'jason', 'pwd': 123}))  # ['name', 'pwd']
    print(list((11,22,33,44,55)))  # [11, 22, 33, 44, 55]
    print(list({1, 2, 3, 4, 5}))  # [1, 2, 3, 4, 5]
    print(list(True))  # 不行
    

    list可以转换支持for循环的数据类型


  • 2.索引取值

    用法举例

    name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
    print(name_list[0])  # jason
    print(name_list[-1])  # jerry
    

  • 3.切片操作

    用法举例

     name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
     print(name_list[1:4])  # ['kevin', 'tony', 'tom']
     print(name_list[-4:-1])  # ['kevin', 'tony', 'tom']
    

  • 4.步长

    用法举例

    name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
    print(name_list[0:4:1])  # ['jason', 'kevin', 'tony', 'tom']
    print(name_list[0:4:2])  # ['jason', 'tony']
    print(name_list[-1:-4:-1])  # ['jerry', 'tom', 'tony']
    

  • 5.统计列表中元素的个数

    用法举例

    name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
    print(len(name_list))  # 5
    

  • 6.成员运算 最小判断单位是元素不是元素里面的单个字符

    用法举例

    name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
    print('j' in name_list)  # False
    print('jason' in name_list)  # True
    

  • 7.列表添加元素的方式

    方式例子
    添加的列表.append(‘元素’) # 尾部追加’单个’元素name_list.append(‘小李’)
    被添加的列表.insert(位置, 元素) # 指定位置插入’单个’元素name_list.insert(0, 123)
    列表1.extend(列表2) # 合并列表name_list.extend([11, 22, 33, 44, 55])

    用法举例

    name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
    # 尾部追加'单个'元素
    name_list.append('小李')
    print(name_list)
    name_list.append([11, 22, 33, 44])
    print(name_list)
    # 指定位置插入'单个'元素
    name_list.insert(0, 123)
    name_list.insert(2, '可不可以插个队')
    name_list.insert(1, [11, 22, 33])
    print(name_list)
    # 合并列表
    name_list.extend([11, 22, 33, 44, 55])
    print(name_list)
    

    运行结果
    在这里插入图片描述

    extend其实可以看成是for循环+append


  • 8.删除元素

    方式语法
    通用的删除方式del 列表[位置]
    就地删除 指名道姓的直接删除某个元素列表.remove(要删除的元素)
    延迟删除列表.pop(指定索引值) 默认删除尾部

    用法举例

    name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
    # 通用的删除方式
    del name_list[0]
    print(name_list)
    # 就地删除
    print(name_list.remove('jerry'))
    print(name_list)
    # 延迟删除
    print(name_list.pop())
    print(name_list)
    
    

    运行结果
    在这里插入图片描述


  • 9.修改列表元素

    用法举例

    name_list = ['jason', 'kevin', 'tony', 'jerry']
    print(id(name_list[0]))
    name_list[0] = 'tom'
    print(id(name_list[0]))
    print(name_list)
    

    运行结果
    在这里插入图片描述


  • 10.排序

    用法举例

     ss = [44, 77, 99, 11, 22, 33, 88, 66]
     ss.sort()  # 默认是升序
     print(ss)  # [11, 22, 33, 44, 66, 77, 88, 99]
     ss.sort(reverse=True)  # 可以修改尾降序
     print(ss)  # [99, 88, 77, 66, 44, 33, 22, 11]
    

    运行结果
    在这里插入图片描述


  • 11.翻转

    用法举例

    ss = [44, 77, 99, 11, 22, 33, 88, 66]
    ss.reverse()  # 前后颠倒
    print(ss)
    

    运行结果
    在这里插入图片描述


  • 12.比较运算

    用法举例

    s1 = [11, 22, 33]
    s2 = [1, 2, 3, 4, 5, 6, 7, 8]
    print(s1 > s2)  # True
    s1 = ['A', 'B', 'C']  # A>>>65
    s2 = ['a']  # a>>>97
    print(s1 > s2)  # False
    

    运行结果
    在这里插入图片描述

    列表在做比较的时候 其实比的是对应索引位置上的元素


  • 13.统计列表中某个元素出现的次数

    用法举例

    l1 = [11, 22, 22, 11, 22, 11, 22, 33, 44, 55, 44, 33]
    print(l1.count(11))  # 统计元素11出现的次数
    

    运行结果
    在这里插入图片描述


  • 14.清空列表
    用法举例
    l1 = [11, 22, 22, 11, 22, 11, 22, 33, 44, 55, 44, 33]
    l1.clear()  # 清空列表
    print(l1)
    
    运行结果
    在这里插入图片描述

可变类型与不可变类型

初学python的时候,可能会有很多疑惑,尤其是最先接触的所谓的“可变数据类型”和“不可变数据类型”。python与C/C++不一样,它的变量使用有自己的特点。 首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型。可变数据类型:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。

  • 不可变数据类型分析
>>> x = 1
>>> id(x)
31106520
>>> y = 1
>>> id(y)
31106520
>>> x = 2
>>> id(x)
31106508
>>> y = 2
>>> id(y)
31106508
>>> z = y
>>> id(z)
31106508


>>> x += 2
>>> id(x)
31106484 

上面这段程序都是对不可变数据类型中的int类型的操作,id()查看的是当前变量的地址值。我们先来看x = 1和y = 1两个操作的结果,从上面的输出可以看到x和y在此时的地址值是一样的,也就是说x和y其实是引用了同一个对象,即1,也就是说内存中对于1只占用了一个地址,而不管有多少个引用指向了它,都只有一个地址值,只是有一个引用计数会记录指向这个地址的引用到底有几个而已。当我们进行x = 2赋值时,发现x的地址值变了,虽然还是x这个引用,但是其地址值却变化了,后面的y = 2以及z = y,使得x、y和z都引用了同一个对象,即2,所以地址值都是一样的。当x和y都被赋值2后,1这个对象已经没有引用指向它了,所以1这个对象占用的内存,即31106520地址要被“垃圾回收”,即1这个对象在内存中已经不存在了。最后,x进行了加2的操作,所以创建了新的对象4,x引用了这个新的对象,而不再引用2这个对象。

  • 可变数据类型分析
>>> a = [1, 2, 3]
>>> id(a)
41568816
>>> a = [1, 2, 3]
>>> id(a)
41575088
>>> a.append(4)
>>> id(a)
41575088
>>> a += [2]
>>> id(a)
41575088
>>> a
[1, 2, 3, 4, 2]

从上面的程序中可以看出,进行两次a = [1, 2, 3]操作,两次a引用的地址值是不同的,也就是说其实创建了两个不同的对象,这一点明显不同于不可变数据类型,所以对于可变数据类型来说,具有同样值的对象是不同的对象,即在内存中保存了多个同样值的对象,地址值不同。接着来看后面的操作,我们对列表进行添加操作,分别a.append(4)和a += [2],发现这两个操作使得a引用的对象值变成了上面的最终结果,但是a引用的地址依旧是41575088,也就是说对a进行的操作不会改变a引用的地址值,只是在地址后面又扩充了新的地址,改变了地址里面存放的值,所以可变数据类型的意思就是说对一个变量进行操作时,其值是可变的,值的变化并不会引起新建对象,即地址是不会变的,只是地址中的内容变化了或者地址得到了扩充。

总结

可变类型与不可变类型:
    可变类型     列表
        值改变 内存地址不变 修改的是本身
    不可变类型   字符串
        值改变 内存地址肯定遍 修改过程产生了新的值

队列与堆栈

队列
	先进先出
    	eg:超市排队结账 符合队列的特征
堆栈
	先进后出
    	eg:叠衣服 符合堆栈的特征
# 使用列表模拟出队列与堆栈的特征

# 队列
 new_list = []
# 先进
 new_list.append(111)
 new_list.append(222)
 new_list.append(333)
# 先出
 for i in new_list:
     print(i)
 print(new_list.pop(0))
 print(new_list.pop(0))
 print(new_list.pop(0))

# 堆栈
new_list = []
# 先进
new_list.append(111)
new_list.append(222)
new_list.append(333)
# 后出
print(new_list.pop())
print(new_list.pop())
print(new_list.pop())

队列运行结果
在这里插入图片描述
堆栈运行结果
在这里插入图片描述


今日学习时间:

这里统计计划学习的时间

1、 上午8:30~12:30
2、 下午2:30~5:30
3、 晚上6:30~9:30


今日学习产出:

这里统计学习计划的总量

  • 1、 技术笔记 1遍
  • 2、CSDN 技术博客 1篇
  • 3、每日录音
  • 4、课后作业
    1.将登录功能编写成多用户模式
    2.利用列表编写一个用户注册、登录程序
    提示:循环
    要求:成功一次即可 无需考虑用户冲突等情况
    3.不使用count统计列表中指定元素出现的次数
    data = ‘jason|123’
is_tag = True
count = 1
source_data = ['jason|123', 'tony|123', 'kevin|321', 'jerry|222']
while is_tag:
    # 三次错误后提示,以及询问是否需要重新注册
    if count == 4:
        ask = input('您已经尝试了三次 是否继续(y/n) 或者您是否需要重新注册一个账号(z)>>>:')
        if ask == 'y':
            count = 1
        # 注册功能实现
        elif ask == 'z':
            username01 = input('请输入您的用户名>>>:').strip()
            # 判断用户输入是否为空
            if len(username01) == 0:
                print('用户名不能为空')
                continue
            password01 = input('请输入您的密码>>>:').strip()
            # 判断用户输入是否为空
            if len(password01) == 0:
                print('密码不能为空')
                continue
            print(f'您的用户名:{username01},密码:{password01}')
            # 格式化用户输入的用户名和密码,并存入列表‘source_data’
            count02 = username01 + '|' + password01
            source_data.append(count02)
            count = 1
        else:
            print('拜拜了您嘞!!')
            break
    # 提示用户输入,以及询问是否需要注册
    username = input('请输入您的用户名[您是否需要注册用户名和密码(y)]>>>').strip()
    # 判断用户输入是否为空
    if len(username) == 0:
        print('用户名不能为空')
        continue
    # 注册功能实现
    if username == 'y':
        username = input('请输入您的用户名>>>:').strip()
        # 判断用户输入是否为空
        if len(username) == 0:
            print('用户名不能为空')
            continue
        password = input('请输入您的密码>>>:').strip()
        # 判断用户输入是否为空
        if len(password) == 0:
            print('密码不能为空')
            continue
        # 格式化用户输入的用户名和密码,并存入列表‘source_data’
        print(f'您的用户名:{username},密码:{password}')
        count02 = username + '|' + password
        source_data.append(count02)
        continue
    password = input('请输入您的密码>>>:').strip()
    # 判断用户输入是否为空
    if len(password) == 0:
        print('密码不能为空')
        continue
    # 格式化用户输入的用户名和密码,用成员运算判断该用户名和密码是否正确
    count01 = username + '|' + password
    if count01 in source_data:
        print('登录成功')
        # 用户指令功能实现
        while is_tag:
            cmd = input('输入您的指令>>>:').strip()
            print(f'正在执行您输入的命令({cmd})....')
            if cmd == 'byb':
                print('下次再见!')
                is_tag = False
    else:
        print('用户名或密码错误!')
        count += 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值