zoukankan      html  css  js  c++  java
  • 第三天——字符串(二)


    字符串


    一.字符串(str)

    字符串, 用于存储一些少量的数据,在Pyhton当中只要是用引号引起来的就是字符串,字符串中的每个单独的字母汉字都是一个元素.

    在第一天的时候咱们简单的认识了下字符串,今天我们好好的来认识一下这个让你又喜又优的字符串

    我们来回忆下字符串是不是可以进行加减乘除

    1.1 字符串加

    a = '世界'
    b = '你好'
    print(a + b)
    结果:
    世界你好
    

    通过刚刚我们的测试发现字符串也是可以进行加法操作的,字符串相加其实有个专业的名词 --- 字符串拼接;相加的规则就是必须都是字符串才能相加

    字符串中是不能进行减法和除法操作的,通过这句话就能得知字符串是可以进行乘法操作的,我们立马来看一下:

    1.2 字符串乘

    a = '坚强'
    print(a * 8)
    结果:
    坚强坚强坚强坚强坚强坚强坚强坚强
    

    字符串的乘法就是将多个字符串拼接到一起,乘法的规则:只能是字符串和数字相乘

    我们回顾完第一天的字符的内容,那就来看看咱们今天要讲的内容是什么??

    1.3 索引(下标)

    大家在上学的时候就会发现在一个班有的同学的名字是一样的,最后大家为了好区分就有了外号,我们每个人都有个学号,其实学校就是为了防止重名找错人,

    学号就是一种能够保证唯一且准确的手段,这种手段在计算机中存在,这种手段叫做索引,也有人称之为下标.
    在这里插入图片描述
    图上就是对"meet"字符串进行索引排号,其实图上有一点大家不难看出m对应的是数字0,如果让我们人来给排号.下意识的会从1开始.

    因为我们从小的时候就是从1开始数数的,但是在计算机中数数确实要从0开始,其实这个点也是对程序的入门.

    以后在碰到这种类似的问题我们就知道是从0开始计数,废话不多说我们来看看,我说的到底行不行.

    name = 'meet'
    # 索引  0123
    print(name[0])
    结果:
    m
    

    细心的老铁们会发现这[ ]是干啥的,这个是一个查找,我不知道字符串中第一个是什么,但是我知道第一个的索引,我就可以通过这个方式来查看

    比方:我不知道这个学生叫什么,但是我知道他的学号.我也可以通过学号找到这个同学.

    图上这个是从左到右的一种排序,其实还有一种从右像左的排序,看下图:

    在这里插入图片描述
    这个查看和上边的一样,只不过是索引排序的方式不一样,他这次的排列序号是从右向左并且还是以-1开始,这里的-1其实就是表示我们的倒数第一个

    -2表示倒数第二个,这样排列,如果我们的字符串比较长的时候想要获取最后一个就完全可以使用-1,看以下示例:

    name = 'meet'
    # 索引 -4-3-2-1
    print(name[-1])
    结果:
    t
    

    告诉大家一个小技巧,刚开始的我们不能明确的区分这个字符串中的每个索引的时候,我们就先把每个字母对应的索引写下来,这样就方便我们查找

    上边我们说完了索引,你们就以为完事了是吗?不是滴,咱们还有来个内容没有进行讲解,分别是切片和步长

    1.4 切片

    切片又是什么呢?我们先来看一个示例:

    name = 'meet'
    # 索引  0123
    print(name[0:3])
    结果:
    mee
    

    [第一个位置是开始:第二个位置是终止]中间必须使用分号,这样的写法就是从索引0开始获取到索引3结束  

    这个结果是不是和大家想的有点出入啊,大家肯定认为获取到的内容是meet,但是为什么是mee呢,因为终止的索引是不包含的获取的是这个区间的内容

    想想咱们在买肉的时候,有一个块整肉,这块整肉就后边有点肥,不想要是不是就让老板给切掉了,我们就买前边的部分啊.在生活中这种神操作就是切片

    我也知道你们刚接过这些东西,使用起来不是很熟悉,尤其是切片这部分,在悄悄的告诉你们个小技巧,下次当看到切片中终止位置的时候把这个数减一就ok啦

    1.5 步长

    步长又是什么呢?先看示例:

    name = 'meet'
    
    # 索引  0123
    
    print(name[0:3:1])
    
    结果:
    
    mee
    

    在这里插入图片描述
    发现我在中括号中最后一个位置写了一个东西,也没什么变化,是的没有变化,因为我们不写的时候他默认就是1,我们换个数字在来看看

    name = 'meet'
    
    # 索引  0123
    
    print(name[0:3:2])
    
    结果:
    
    me
    

    这又是啥情况呢?想想我开始告诉大家的中括号里第一个参数是起始位置,第二参数是终止位置,第三个参数现在告诉大家是步长(每次走几步)
    在这里插入图片描述
    当步长设置为2的时候,咱们只需要用起始位置0加上步长2,结果也就2然后在把索引为2的找到,2在加上步长2就是4,当要查找索引4是发现终止索引就是3,

    所有不会进行查找.最终的结果就是me.

    1.6 字符串方法详解

    字符串中的方法有很多,我给大家整理了一个思维导图,我们只讲解重要的,剩余的了解就可以了

    1.6.1 全部大写

    name = 'alex'
    new_name = name.upper()
    print(new_name)
    # 把这个字符串全部变成大写
    

    1.6.2 全部小写

    name = 'ALEX'
    new_name = name.lower()
    print(new_name)
    # 把这个字符串全部变成小
    

    应用场景:

    # 字符串大小写做验证码
    y_z_m = 'O98k'
    y_z_m_input = input("请输入验证码(O98k)")
    user = input('请输入账号:')
    pwd = input('请输入密码:')
    if y_z_m == y_z_m_input:
        if user == 'alex' and pwd == '8520':
            print('登陆成功!')
        else:
            print('登录失败')
    else:
        print('验证码错误!')
    

    1.6.3 以什么开头

    name = 'alex'
    new_name = name.startswith('a')
    if new_name:
        print('是以a开头')
    # 判断这是不是字符串是不是以a开头的
    
    name = 'alex'
    new_name = name.startswith('e',2,5)
    if new_name:
        print('是以e开头')
    
    # 我们可以指定从哪个位置开始哪个位置结束
    

    1.6.4 以什么结尾

    name = 'alex'
    new_name = name.endswith('x')
    if new_name:
        print('是以x结尾')
    # 判断这是不是字符串是不是以x结尾的
    
    name = 'alex'
    new_name = name.endswith('x',2,5)
    if new_name:
        print('是以x结尾')
    # 判断这是不是字符串是不是以x结尾的
    

    1.6.5 统计出现的次数

    name = 'alexdasx'
    new_name = name.count('a')
    print(new_name)
    # 统计name这个字符串中a出现的次数
    

    1.6.6 字符串替换

    name = 'alexdasx'
    
    new_name = name.replace('sx','sb',1)
    
    print(new_name)
    
    # 替换字符串中的内容以外 我们可以指定要替换的次数
    

    1.6.7 去除头尾两边的空格 换行符/制表符

    name = ' alexdasx '
    new_name = name.strip() # 默认去除的头尾两端的空格,换行符,制表符 也可以自己指定
    print(new_name)
    # 去除头尾俩遍的空格和换行符
    

    1.6.8 分割

    name = 'alexdasx'
    new_name = name.split("x")  # 默认以空格,换行符,制表符分隔
    print(new_name)
    # 也可以通过x将字符串name进行切割
    
    name = 'alexdasx'
    new_name = name.split("x",maxsplit=1)  # 默认以空格,换行符,制表符分隔
    print(new_name)
    # 切割后的内容是一个列表
    

    1.6.9 字符串格式化

    name = 'alexdasx{}'
    new_name = name.format('说的对')
    print(new_name)
    # 字符串格式化
    # 可以按照顺序去填充,也可以按照索引去填充,也可以按照关键字填充
    

    练习

    将 name 变量对应的值中所有的"l"替换为 "p",并输出结果
    将name变量对应的值中的第一个"l"替换成"p",并输出结果
    将 name 变量对应的值根据所有的"l"进行分割,并输出结果。
    将name变量对应的值根据第一个"l"分割,并输出结果。
    请输出 name 变量对应的值的第2个字符?
    请输出 name 变量对应的值的前3个字符?
    请输出 name 变量对应的值的后2个字符?
    

    1.6.10 is系列

    判断是不是十进制的数字,返回的是布尔值
    
    name = 'alexdasx'
    new_name = name.isdecimal()
    print(new_name)
    
    # 判断是不是十进制的数字,返回结果是布尔值
    
    判断是不是数字和字母以及中文,返回的是布尔值
    
    name = 'alex7dasx'
    new_name = name.isalnum()
    print(new_name)
    
    # 判断是不是数字和字母以及中文,返回结果是布尔值
    
    判断是不是字母和汉字,返回的是布尔值
    
    name = 'alexdasx'
    new_name = name.isalpha()
    print(new_name)
    
    # 判断是不是纯字母和汉字,返回的是布尔值
    

    3.6.11 获取长度

    目前我们写的内容还比较少,如果有一个很长很长的字符串,要是一个一个数是不是很累呢,Python给咱们提供了一个方法就是获取长度的.

    长度获取示例:

    name = "Meet"
    print(len(name))
    结果:
    4 
    

    这里需要大家清楚一点的就是,len是一个公共的方法,不是字符串的方法只有用字符串.的方式使用的才是字符串的方法
    我们现在能够轻松的获取到到长度,现在我有这么一个字符串 name = "Meet",请使用while循环获取到字符串中每个元素并打印,效果图入下:
    在这里插入图片描述

    3.6.12 使用while循环打印单个元素

    name = "Meet"
    count = 0
    while count < len(name):
        print(name[count])
        count = count + 1
    以上这个写法是没有问题的,你们来看下边这个会不会简单些
    

    3.6.13 for循环

    
    name = "Meet"
    for i in name:
        print(i)
    
    for i in "Meet":
        print(i)
    

    上边的这个东西叫做for循环, for是关键字 i是一个变量 后边的name是要被循环的内容,他会把这个name指向的字符串里的每个元素打印出来

    for循环是可以循环的数据结构:

    • 字符串(str)
    • 列 表(list)
    • 元 祖(tuple)
    • 字 典(dict)
    • 集 合(set)

    唯独不能进行循环的就是 整型(int)和布尔值(bool)

    作业

    1.有变量name = "aleX leNb" 完成如下操作:(10分钟)

    移除 name 变量对应的值两边的空格,并输出处理结果
    判断 name 变量是否以 "al" 开头,并输出结果
    判断name变量是否以"Nb"结尾,并输出结果
    将 name 变量对应的值中的 所有的"l" 替换为 "p",并输出结果 
    将name变量对应的值中的第一个"l"替换成"p",并输出结果
    将 name 变量对应的值根据 所有的"l" 分割,并输出结果。
    将name变量对应的值根据第一个"l"分割,并输出结果。 
    将 name 变量对应的值变大写,并输出结果
    将 name 变量对应的值变小写,并输出结果
    判断name变量对应的值字母"l"出现几次,并输出结果
    如果判断name变量对应的值前四位"l"出现几次,并输出结果
    请输出 name 变量对应的值的第 3 个字符? 
    请输出 name 变量对应的值的前 4 个字符? 
    请输出 name 变量对应的值的后 7 个字符?
    

    2.有字符串s = "123a4b5c" (10分钟)

    通过对s切片形成新的字符串s1,s1 = "123"
    通过对s切片形成新的字符串s2,s2 = "a4b"
    通过对s切片形成新的字符串s3,s3 = "1345"
    通过对s切片形成字符串s4,s4 = "2ab"
    通过对s切片形成字符串s5,s5 = "c"
    通过对s切片形成字符串s6,s6 = "ba2"
    

    3.使用while循环和for循环分别打印字符串s="asdfer"中每个元素。(15分钟)

    4.使用for循环对s="asdfer"进行循环,但是每次打印的内容都是"asdfer"。(10分钟)

    5.使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb, 例如:asb, bsb,csb,...gsb。(10分钟)

    6.使用for循环对s="321"进行循环,打印的内容依次是:"倒计时3秒","倒计时2秒","倒计时1秒","出发!"。(10分钟)

    7.实现一个整数加法计算器(两个数相加):(10分钟) 如:content = input("请输入内容:") 用户输入:5+9或5+ 9或5 + 9,然后进行分割再进行计算。

    8.实现一个整数加法计算器(多个数相加):(20分钟) 如:content = input("请输入内容:") 用户输入:5+9+6 +12+ 13,然后进行分割再进行计算。

    9.计算用户输入的内容中有几个整数(以个位数为单位)。(15分钟) 如:content = input("请输入内容:") # 如fhdal234slfh98769fjdla

    10.写代码:计算 1 - 2 + 3 ... + 99 中除了88以外所有数的总和?(20分钟)

    11.判断⼀句话是否是回⽂. 回⽂: 正着念和反着念是⼀样的. 例如, 上海⾃来⽔来⾃海上

    12.实现一个整数加法和减法的计算器(3个数相加):(20分钟)

    13.实现一个整数加法和减法的计算器(多个数相加):(30分钟)

    14.选做题:写代码,完成下列需求: 用户可持续输入(用while循环),用户使用的情况: 输入A,则显示走大路回家,然后在让用户进一步选择: 是选择公交车,还是步行? 选择公交车,显示10分钟到家,并退出整个程序。 选择步行,显示20分钟到家,并退出整个程序。 输入B,则显示走小路回家,并退出整个程序。 输入C,则显示绕道回家,然后在让用户进一步选择: 是选择游戏厅玩会,还是网吧? 选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。 选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。

    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 想到与得到中间还有两个字——做到。
  • 相关阅读:
    对象,类,封装,继承,多态是什么
    面向对象和非面向对象程序的区别是什么?
    什么是OOA,OOP
    git stash git tag
    从一个远程仓库同步向另一个远程仓库同步代码
    VScode 配置rust开发环境
    IAR ICCARM V8.32.3在Windows Server端进行Ollydbg破解
    阅读笔记
    FP32转FP16能否加速libtorch调用
    阅读笔记-Chained-Tracker
  • 原文地址:https://www.cnblogs.com/huoxc/p/12954708.html
Copyright © 2011-2022 走看看