基础数据类型之字符串

字符串

  • 加了引号的字符就是字符串类型

  • 用于标识:描述性的内容,如姓名,性别,国籍,种族

  • 字符串 常用单引号

  • 双引号 :msg = "My name is Egon , I'm 18 years old!"

  • 多引号:msg = '''

    ​ 二零一九年

    ​ 七月四号

    ​ 天气晴

    ​ '''

    多行字符串用多引号,可以换行。可以写诗!!!!

msg = '''
天不生我李淳罡
剑道万古如长夜
'''
print(msg)


- ```python
a = '天不生我李淳罡\n'
b = '剑道万古如长夜\n'
print(a,b,sep='')
  • 字符串的拼接:字符串之间可以进行相加“+”

    ​ 字符串与int之间可以进行相乘“*”

字符串格式化

1,%-formatting语句

  • s%,字符串类型的占位符

  • d%,数字类型的占位符

  • %%转换成普通的%号

  • #%s字符串占位符:可以接收字符串,也可接收数字
    print('My name is %s,my age is %s' %('egon',18))
    #%d数字占位符:只能接收数字
    print('My name is %s,my age is %d' %('egon',18))
    print('My name is %s,my age is %d' %('egon','18')) #报错
    
    #接收用户输入,打印成指定格式
    name=input('your name: ')
    age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d
    
    print('My name is %s,my age is %s' %(name,age))
    
    #注意:
    #print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,无法传给%d,所以会报错
    
  • name = input('请输入您的姓名:')
    age = input('请输入你的年龄:')
    hobby = input('你的爱好时什么啊:')
    job = input('请输入你的职业:')
    num = input('请输入你的电话号码:')
    speciality = input('你的特长是什么:')
    msg = '''
    ------------info of  %s -----------------
    Name : %s
    Age :  %s
    Hobby  :  %s
    Job :  %s
    Num :  %s
    Speciality :  %s
    -----------------end----------------------'''
    print(msg %(name,name,age,hobby,num,job,speciality,))
    

2,f-string

  • f-string,亦称为格式化字符串常量(formatted string literals)

  • f-string用大括号 {} 表示被替换字段,其中直接填入替换内容:

    • >>> name = 'Eric'
      >>> f'Hello, my name is {name}'
      'Hello, my name is Eric'
      
    • >>> number = 7
      >>> f'My lucky number is {number}'
      'My lucky number is 7'
      
    • >>> price = 19.99
      >>> f'The price of this book is {price}'
      'The price of this book is 19.99'
      
  • 表达式求值与函数调用

  • f-string的大括号 {} 可以填入表达式或调用函数,Python会求出其结果并填入返回的字符串内

    • >>> f'A total number of {24 * 8 + 4}'
      'A total number of 196'
      
    • >>> name = 'ERIC'
      >>> f'My name is {name.lower()}'
      'My name is eric
      
  • 引号、大括号与反斜杠

  • f-string大括号内所用的引号不能和大括号外的引号定界符冲突,可根据情况灵活切换 ' 和 ":

    • >>> f'I am {"Eric"}'
      'I am Eric'
      >>> f'I am {'Eric'}'
      File "<stdin>", line 1
      
    • 若 ' 和 " 不足以满足要求,还可以使用 ''' 和 """:

    • >>> f"He said {"I'm Eric"}"
      File "<stdin>", line 1
      f"He said {"I'm Eric"}"
      ^
      SyntaxError: invalid syntax
      >>> f'He said {"I'm Eric"}'
      File "<stdin>", line 1
      f'He said {"I'm Eric"}'
      ^
      SyntaxError: invalid syntax
      >>> f"""He said {"I'm Eric"}"""
      "He said I'm Eric"
      >>> f'''He said {"I'm Eric"}'''
      "He said I'm Eric"
      

3,str.format()函数

字符串的用法

1,字符串索引

  • 通过索引可以精确地找到元素的位置

  • name = 'david'

  • david 每一个字母代表一个元素,

  • 从左向右,从零开始记位

    • d(0),a(1),v(2),i(3),d(4)
  • 从右向左,从-1开始记位,到-n结束

    • d(-5),a(-4),v(-3),i(-2),d(-1)
  • 索引的时候索引超出范围的时候会报错

2,字符串切片slice

  • 切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量start、终止偏移量end 以及可选的步长step 来定义一个分片。

    格式: [start🔚step]

  • 语法

    • s[start: end: step]
      start:  起始位置
      end:  结束为止。取不到
      step:  步长。 每隔xx个取1个。 默认是1 如果step是-1 从右往左取值
      
  • 顾头不顾尾,print(name[起始位置:终止位置])

    • name='david'
      print(name[0:2])
      print(name[0:4:2])
      result
      da
      dv
      
  • print(name[:]),某个位置不指定的时候默认取到最后 或取到最前

    • name = 'david' 
      print(name[:])
      print(name[0:])
      print(name[0:5])
      result
      david
      david
      david
      

  • 实例:

    • s = 'Python最NB'
      获取s字符串中前3个内容
      获取s字符串中第3个内容
      获取s字符串中后3个内容
      获取s字符串中第3个到第8个
      获取s字符串中第2个到最后一个
      获取s字符串中第1,3,5个内容
      获取s字符串中第2,4,6个内容
      获取s字符串中所有内容
      获取s字符串中第4个到最后一个,每2个取一个
      获取s字符串中倒数第5个到最开始,每3个取一个
      s = 'Python最NB'
      print(s[0:3])
      print(s[2])
      print(s[6:])#print(s[-3:])
      print(s[2:8])
      print(s[1:])
      print(s[0:6:2])
      print(s[1:7:2])
      print(s[:])
      print(s[3::2])
      print(s[-5::-3])
      result:
      Pyt
      t
      最NB
      thon最N
      ython最NB
      Pto
      yhn
      Python最NB
      hnN
      oy
      
    • 切片的时候起始位置和终止位置都超出是运行不会报错

字符串的方法

  • 字符串全部大写:upper

    • name = 'David'
      name1 = name.upper()
      print(name1)
      result
      DAVID
      
  • 字符串全部小写:lower

    • name = 'David'
      name1 = name.lower()
      print(name1)
      result
      david
      
  • 实列:验证码输入

    • while True:
      	code = input('请输入验证码:')
      	code_check = 'David'
      	if code_check.upper() == 'David'.upper():
      		print('输入正确')
      		break
      	else:
      		print('输入错误')
              
      
  • 开头结尾的判断

    • 开头:字符串.startwith()

      • name = 'David'
        name1 = name.startswith('D')
        name2 = name.startswith('d')
        name3 = name.startswith('a',1,3)
        print(name1,name2,name3)
        result
        True False True
        
    • 结尾:字符串.endswith()

      • name = 'David'
        name1 = name.endswith('d')
        name2 = name.endswith('D')
        name3 = name.endswith('a',1,3)
        print(name1,name2,name3)
        result
        True Fals False
        
    • count():计数计算字符或数字出现的次数

      • name = 'david255'
        print(name.count('2'))
        print(name.count('5'))
        print(name.count('d'))
        result
        1
        2
        2
        
    • split():切割,以空格和换行符以及制表符进行分割,切割得到的是列表

      • 语法解释
        S.split(sep=None, maxsplit=-1) -> list of strings
        sep -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
        maxsplit -- 分割次数
        
      • name = 'david'
        print(name.split())
        print(name.split.('a'))
        print(name.split('d',1))
        print(name.split('d'))
        result
        ['david']
        ['d', 'vid']
        ['', 'avid']
        ['', 'avi', '']
        
      • msg='hello world egon say hahah'
        print(msg.split()) #默认以空格作为分隔符
        result
        ['hello', 'world', 'egon', 'say', 'hahah']
        
    • strip():官方解释

      • S.strip([chars]) -> str
        
            Return a copy of the string S with leading and trailing whitespace removed.
            If chars is given and not None, remove characters in chars instead.
        翻译:
        若chars为未给定,则删除字符串头尾的空白字符,包括\r,\t\,\n和空格;
        若chars给定,则删除字符串头尾,位于chars中的字符。注意,无顺序要求。
        
    • 移除空白

      • msg = '  hello, world  '
        print(msg.strip())
        result
        hello world
        
    • 另外,strip()方法还有两个变体:

      S.lstrip(chars) 删除s字符串中开头处,位于 chars删除序列的字符

      S.rstrip(chars) 删除s字符串中结尾处,位于 chars删除序列的字符

      • msg = '**hello,world***'
        print(msg.strip('*'))
        print(msg.lstrip('*'))
        print(msg.rstrip('*'))
        result
        hello,world
        hello,world***
        **hello,world
        
    • 指定删除字符串中的内容

      • name = 'david'
        print(name.strip(d))
        result
        avi
        
    • 实例

      • while True:
            name=input('user: ').strip()
            password=input('password: ').strip()
            if name == 'egon' and password == '123':
                print('login successfull')
        
    • replace:语法解释

      • str.replace(old, new[, max])
        old:将要被我们替换的旧的字符串
        new:新字符串,用来替换旧的字符串(替换一次或者多次old)
        max:用来替换的次数,这里有两种:(1)当不将max参数传入时,默认将所有old字符或者字符串替换为new字符或者字符串;(2)当我们将max参数传入后,则将旧字符串替换为新字符串不超过max次,多余的则不进行替换
        返回值:返回的字符串中的old(旧字符串)替换为new字符串后生成的心的字符串,如
        
      • name='alex say :i have one tesla,my name is alex'
        print(name.replace('alex','SB',1))
        result
        SB say :i have one tesla,my name is alex
        
    • is

      • str.isdigit :判断字符窜是不是都是数字

      • str.isalpha:判断是不是字母,中文

      • str.isdecimal:判断是否是十进制

      • str.isalnum:判断是不是字母,数字,中文

      • print(s.isalnum()) 
        print(s.isalpha())  
        print(s.isdigit()) 
        print(s.isdecimal())
        
  • for in:可迭代循环

  • 数据类型中只有整型和布尔值不能进行for循环

    • 语法:for iter_var in list: for i in
      
      - iter_var是迭代变量,指向序列对象的元素
      - list是可迭代对象
      - 语句块是循环体,在循环体中可以使用iter_var访问可迭代对象的元素。
      
    • name = 'david'
      for i in name:
      	print(i)
      result
      d
      a
      v
      i
      d
      
    • name = 'david'
      for i in name:
      	print(i)
      print(i)
      result
      d
      a
      v
      i
      d
      d
      
posted @ 2019-12-13 09:20  阿浪阿浪  阅读(138)  评论(0编辑  收藏  举报