Python基础学习(八)--字符串,转义字符,元字符串,字符串编码

一、字符串

字符串是元素以引号包围,不可修改的有序序列

(一)索引

因为字符串是有序的,所以它自然就可以使用索引获取值
a='123abc'
print(a[0])    # 1
print(a[3])    # a
i=0
while i<len(a):
    print(a[i])    # 123abc
    i+=1
a='123abc'
for i in range(len(a)):
    print(a[i])    # 123abc
关键点1.不可修改
a='123abc'
a[2]=6    # 报错,不可修改
关键点2.利用负索引,反向输出字符串
a='123abc'
for i in range(-1,-len(a)-1,-1):
    print(a[i],end='')    # cba321
print()
a='123abc'
i=-1
while i>=-len(a):
    print(a[i],end='')    # cba321
    i-=1

(二)切片

与列表的切片类似

从字符串复制出一份指定的内容,存储在另一个变量中,不会对原字符串有影响。

a='123abc'
print(a[0:5])    # 123ab
for i in range(5):
    print(a[i],end='')    # 123ab
print()
print(a[0:5:2])    # 13b
for i in range(0,5,2):
    print(a[i],end='')    # 13b
a = '123abcd'
print(a[0:])    # 123abcd
print(a[3:])    # abcd
print(a[:5])    # 123ab
print(a[:])    # 123abcd
print(a[::3])    # 1ad

# 输出ad
print(a[3::3])    # ad
for i in range(3,len(a),3):
    print(a[i],end='')    # ad
print()    
print(a[::3][1:])    # ad

# 输出1a
print(a[0:4:3])    # 1a

print(a[0:5:-1])    # 无结果
print(a[::-1])    # dcba321
print(a[-1:-5:-2])    # db
a='123456789'
print(a[-8:5])    # 2345
print(a[0:-7])    # 12
print(a[-7:0])    # 无结果
print(a[-7:0:-1])    # 32
print(a[-1:-5])    # 无结果
print(a[-1:-5:-1])    # 9876

(三)连接、重复

这里也是跟列表相似
a='我爱你'
b='北京'
c=a+b
print(c)    # 我爱你北京

a='你好'
c=a*3
print(c)    # 你好你好你好

(四)字符串初始化/可变

a,b,c='123'
print(a)    # 1
print(b)    # 2
print(c)    # 3

a,*b='123'
print(a)    # 1
print(b)    # ['2','3']  变为列表类型

(五)字符串的修饰

方法

1.center()–居中

可以指定填充内容,默认空格

a='123'
b=a.center(7,'*')
print(b)    # **123**
print(a)    # 123
2.ljust()–左对齐

在指定长度左齐,可以指定填充内容,默认空格

3.rjust()–右对齐

在指定长度右齐,可以指定填充内容,默认空格

a='123'
b=a.ljust(10,'$')
print(b)    # 123$$$$$$$
b=a.rjust(10,'$')
print(b)    # $$$$$$$123
4.zfill()–用0填充

将字符串填充到指定长度,不足用0从左开始补充

a='123'
print(a.zfill(10))    # 0000000123
5.strip()–去除空格,也可指定去除内容,左右都去
6.lstrip()–去除空格,也可指定去除内容,去左
7.rstrip()–去除空格,也可指定去除内容,去右
a='     123     '
print(a.lstrip(),end='$')    # 去左
print()
print(a.rstrip(),end='$')    # 去右
print()
print(a.strip(),end='$')    # 左右都去

a='###123####'
print(a.lstrip('#'))
print(a.rstrip('#'))
print(a.strip('#'))

字符串格式化–format

1.用法
(1)使用位置参数
a='我叫{},年龄{}'.format('张三',29)
print(a)    # 我叫张三,年龄29
(2)使用关键字参数
print('我叫{name},年龄{age},姓名{name}'.format(name='张三',age=30))    # 我叫张三,年龄30,姓名张三
(3)使用索引
a='我叫{0},姓名{0}    年龄{1}'.format('李四',29)
print(a)    # 我叫李四,姓名李四    年龄29
2.填充与格式化

格式:
:[填充字符][对齐方式][宽度]
字符–填充字符

对齐方式:
<–左对齐
^–居中对齐

>–右对齐
数字8–宽度

a='我叫{:$^8}'.format('赵六')
print(a)    # 我叫$$$赵六$$$

a='我叫{:*<5}'.format('赵六')
print(a)    # 我叫赵六***

a='我叫{:' '>3}'.format('赵六')
print(a)    # 我叫 赵六
3.精度与进制
a='二进制{:b}'.format(10)
print(a,type(a))
x=bin(10)
print(x,type(x))

a='八进制{:o}'.format(10)
print(a,type(a))
x=oct(10)
print(x,type(x))

a='十六进制{:x}'.format(10)
print(a,type(a))
x=hex(10)
print(x,type(x))
结果:
二进制1010 <class 'str'>
0b1010 <class 'str'>
八进制12 <class 'str'>
0o12 <class 'str'>
十六进制a <class 'str'>
0xa <class 'str'>

字符串格式化–%

name='张三'
age=18
height=1.75
x='我叫%s,身高%.2f,年龄%d'%(name,height,age)
print(x)    # 我叫张三,身高1.75,年龄18

x=0.25
a='成材率%.0f%%'%(x)
print(a)    # 成材率0%

(六)字符串的查找

1.find()–从左往右找,返回首部的索引值

a='abcdef'
b='cd'
x=a.find(b)    # 2
print(x)
print(a.find('zz'))    # -1

长字符串中有多个,只看第一个

a='abcdefcdg'
b='cd'
x=a.find(b)
print(x)    # 2

2.rfind()–从右往左找,返回首部的索引值

a='abcdefcdg'
b='cd'
x=a.rfind(b)
print(x)      # 6

3.index()–从左往右找,返回首部的索引值

a='abcdefcdg'
b='cd'
x=a.index(b)      # 2
print(x)
b='cda'
print(a.index(b))    # 报错

4.rindex()–从右往左找,返回首部的索引值

a='abcdefcdg'
b='cd'
x=a.rindex(b)      # 6
print(x)
b='cda'
print(a.rindex(b))    # 报错
重点:find()和rfind()函数找到的话,返回索引;找不到的话返回-1。
index()和rindex()函数找到的话,同样返回索引;找不到会报错。

5.count()–寻找参数字符串存在的个数

a='abcdefcdgcd'
b='cd'
print(a.count(b))    # 3

扩展:自己开发find()函数

a=input('请输入一个长字符串:')
b=input('请输入想要查找的子字符串:')
def find(b):
    for i in range(len(a)-len(b)+1):
        for j in range(len(b)):
            if a[i+j]!=b[j]:
                break
        else:
            return i
    else:
        return -1
print(find(b))

(七)字符串的拆分

1.partiton()–分隔

参数为一个字符串,以参数分隔长字符串。
只能分割为三部分,包括自身,且以第一次出现的为准。
返回值为一个元组。

x='123ab456ab789'
print(x.partition('ab'))    # ('123', 'ab', '456ab789')

2.splitlines()–按照行分隔

返回值为列表

a='abc\n123\n45'
print(a.splitlines())    # ['abc', '123', '45']

3.split()–分隔

参数为一个字符串,以参数分隔长字符串,不包括自身。
若出现多次,可选用第二个参数maxsplit,设置分隔几次。
返回值为一个列表。

a='123a456a789a0'
print(a.split('a'))    # ['123', '456', '789', '0']
a='2019-07-24'
print(a.split('-'))    # ['2019', '07', '24']
a='123ab456ab789ab000'
print(a.split('ab',maxsplit=1))
print(a.split('ab',maxsplit=2))
print(a.split('ab',maxsplit=3))
结果:
['123', '456ab789ab000']
['123', '456', '789ab000']
['123', '456', '789', '000']
用split()实现splitlines()
a='abc\n123\n45'
print(a.split('\n'))    # ['abc', '123', '45']
用循环实现根据‘\n’分隔
a='abc\n123\n45'
i=0
while i<len(a):
    if a[i]=='\n':
        print()
    else:
        print(a[i],end='')
    i+=1
结果:
abc
123
45

(八)字符串的替换

1.replace()–从左到右替换指定的元素

可以选用第三个参数指定替换的个数,默认全部替换。
原字符串不变。

a='123abc456abc'
b=a.replace('abc','xy')
print(b)    # 123xy456xy
b=a.replace('abc','xy',1)
print(b)    # 123xy456abc
print(a)    # 123abc456abc

2.translate()–按照对应关系来替代内容

maketrans()–用于创建字符映射的转换表

第一个参数是字符串,第二个参数也是字符串,表示转换的目标
两个字符串的长度必须相同,为一一对应的关系

s='12345678901111'
# a,b长度必须相同
a='1234567'
b='abcdefg'
table=str.maketrans(a,b)
c=s.translate(table)
print(c)    # abcdefg890aaaa

(九)字符串变形

1.upper()–将字符串中所有字母转换为大写

2.lower()–将字符串中所有字母转换为小写

3.swapcase()–将字符串中所有字母大小写互换

a='abcABC12'
print(a.upper())    # ABCABC12
print(a.lower())    # abcabc12
print(a.swapcase())    # ABCabc12

4.title()–将字符串中每个单词的首字母大写,以非字母划分

a='what is your name?'
print(a.title())    # What Is Your Name?

5.capitalize()–只有字符串的首字母大写

a='what is your name?'
print(a.capitalize())    # What is your name?

6.expandtabs()–将tab或\t转换为空格

空格数=8-字符数

a='234\t45\t78'
print(a.expandtabs())    # 234123  45      78

(十)字符串判断(返回值均为bool)

1.isdigit()–判断是否完全由数字组成

a='123d'
b=a.isdigit()
print(b)    # False

2.isalpha()–判断是否完全由字母组成

a='azAz_'
print(a.isalpha())    # False

3.isalnum()–判断是否完全由数字或字母组成

a='123aZ'
print(a.isalnum())    # True

4.islower()–判断字符串中所有字母是否完全为小写

a='ac123sd'
print(a.islower())    # True

5.isupper()–判断字符串中所有字母是否完全为大写

a='12JAKSa'
print(a.isupper())    # False

6.istitle()–判断是否满足title格式

a="What Is Your Name?"
print(a.istitle())    # True

7.isspace()–判断是否完全由空格组成

a='        '
print(a.isspace())    #     # True

8.startswith()–判断字符串的开头字符,也可以截取判断

范围同样左闭右开

a='aadsKJLA123'
print(a.startswith('123'))    # False
print(a.startswith('123',8,11))    # True

9.endswith()–判断字符串的结尾字符,也可以截取判断

范围同样左闭右开

a='aadsKJLA'
print(a.endswith('L'))    # False
print(a.endswith('L',0,7))    # True

(十一)dir()和help()内置函数

s='aa'
print(dir(s))
print(dir(str))

print(help(s.replace))

二、转义字符

a='tom\'s cat'
print(a)
b="tom's cat"
print(b)

a='E:\test\nex.txt'
print(a)
a='E:\\test\\nex.txt'
print(a)
结果:
tom's cat
tom's cat
E:	est
ex.txt
E:\test\nex.txt
E:\test\nex.txt
a=19
b=20
c=22
d=33
if a>33 and b>44 and c>55 and c<100 and d>200 and d<=300 \
    and a<300:
    print('判断成功')
else:
    print('判断失败')
print('\c')
print('\n')
print('\t')
print('\\')
print('\'')
print("\"")
结果:
\c


	
\
'
"

三、元字符串

加r,所有转义字符都不进行转义操作。

a=r'E:\test\nex.txt'
print(a)    # E:\test\nex.txt

四、字符串编码

a='la我'
b=a.encode()
print(b)
c=b.decode()
print(c)
结果:
b'la\xe6\x88\x91'
la我

五、学生管理系统(函数实现)

a={'001':{'name':'张三','age':18},
   '002':{'name':'李四','age':28},
   '003':{'name':'王五','age':19},
   '004':{'name':'赵六','age':31},
}

def find(num):
    for k in a.keys():
        if k==num:
            return True
    else:
        return False

def add():
    print('请输入您想要添加的学生信息:')
    num=input('编号:')
    for i in a.keys():
        if num==i:
            print('编号重复,添加失败')
            break
    else:
        name=input('姓名:')
        age=input('年龄:')
        a[num]={'name':name,'age':int(age)}

def delete(num):
    if find(num):
        del a[num]
    else:
        print('没有该学生')

def update(num):
    if find(num):
        name = input('姓名:')
        age = input('年龄:')
        a[num] = {'name': name, 'age': int(age)}
    else:
        print('没有该学生')

def findAll():
    for i in a.items():
        print(i)

while True:
    print('1.增')
    print('2.删')
    print('3.改')
    print('4.查某个')
    print('5.查全部')
    print('0.退出')
    choice=int(input('请输入选择:'))
    if choice==1:
        add()
    elif choice==2:
        num = input('请输入想要删除的编号')
        delete(num)
    elif choice==3:
        num = input('请输入想要更新的编号')
        update(num)
    elif choice==4:
        num=input('请输入想要查询的编号')
        if find(num):
            print(num,':',a[num])
        else:
            print('没有该学生')
    elif choice==5:
        findAll()
    elif choice==0:
        break
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值