Python之字符串

1、什么是字符串

  • 是python内置的一种基本数据类型,是一个不可变量。
  • 字符串的驻留机制:仅保存一份相同且不可变类型字符串的方法。
  • 不同的值被存放在字符串的驻留池中,python对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新的空间,而是把改字符串的地址赋给新创建的变量。

2、字符串的定义方式及驻留机制

(1)定义方式
代码:

a = 'python'
b = "python"
c = '''python'''
print(a,id(a))
print(b,id(b))
print(c,id(c))

运行结果:
在这里插入图片描述
(2)驻留机制的几种情况(交互模式时

  • 字符串的长度为0或1
  • 符合标识符的字符串
  • 字符串只在编译时驻留,而并非运行时
  • [-5,256]之间的整数数字
    因为pycharm对字符串进行了优化处理
    在这里插入图片描述

3、字符串的6大特性

索引 切片 重复 连接 成员操作符 for循环遍历(迭代)

(1).索引

s = 'hello'
# 元素的下标一般从0开始
print(s[0])
print(s[1])

运行结果:
在这里插入图片描述
(2).切片:将产生新的字符串

 s = 'hello'
    
    # 切片的规则:
    # s[start:end:step] 从start开始到end-1结束,步长:step
    
    print(s[0:3])
    print(s[1:2])
    print(s[0:4:2])
    # 显示所有字符
    print(s[:])
    # 显示前3个字符(0 1 2)
    print(s[:3])
    # 从第0个开始到最后一个的前一个结束
    print(s[:-1])
    # 对字符串倒序输出
    print(s[::-1])
    # 显示除了第一个字符以外的其他全部字符
    print(s[1:])

运行结果:
在这里插入图片描述
(3).重复

   s = 'hello'
    # 将字符串s连续打印5print(s * 5)

运行结果:
在这里插入图片描述
(4).连接

s = 'hello'
print(s + ' word!')

运行结果:
在这里插入图片描述
(5).成员操作符

s = 'hello'
# 判断h是否在字符串s中
print('h' in s)

运行结果:
在这里插入图片描述
(6).for循环遍历 (迭代)

   for i in s:
        print(i)

运行结果:
在这里插入图片描述
示例1:回文数的判断

例如:121就是一个回文数

示例 1:
        输入: 121
        输出: true
示例 2:
        输入: -121
        输出: false
        解释: 从左向右读,-121 。 从右向左读,121- 。因>此它不是一个回文数。

代码:

num = input('Num:')
if num == num[::-1]:
    print('这是一个回文数')
else:
    print('不是')

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

5.字符串去除两边空格

(1).去掉空格

>>> s = '   hello  '
>>> s
'   hello  '
# 去除两边的空格
>>> s.strip()
'hello'
#去除右边的空格(right)
>>> s.rstrip()
'   hello'
#去除左边的空格(left)
>>> s.lstrip()
'hello  '

(2).去掉指定字符

>>> s = 'helloh'
# 去掉两边的h
>>> s.strip('h')
'ello'
# 去掉右边的h
>>> s.rstrip('h')
'hello'
# 去掉左边的h
>>> s.lstrip('h')
'elloh'

4、字符串的查找

在这里插入图片描述

5、字符串的大小写转换

在这里插入图片描述

  • 因为字符串是不可变结构,所以产生新的字符串。
c = 'python'
print(c.upper())

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

c = 'test'
print(c.capitalize())

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

c = 'test title'
print(c.title())

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

6、字符串内容对齐的操作方法

在这里插入图片描述

#center 表示居中对齐,默认用空格补齐剩余元素
print('学生管理系统'.center(30))

在这里插入图片描述

居中对齐,选用*号补齐剩余元素
print('学生管理系统'.center(30,'*'))

在这里插入图片描述

 ljust 表示左对齐
    print('学生管理系统'.ljust(30,'*'))

在这里插入图片描述

# rjust 表示右对齐
print('学生管理系统'.rjust(30,'*'))

在这里插入图片描述

7、字符串的分离和连接

(1).分离
在这里插入图片描述

代码:若不指定分隔符,默认为空格。
split: 与rsplit的区别就是rsplit是从右边开始分割。

  • .split(’|’) :指定分隔符为|
 s = '172.25.254.66'
    # split:分离; 通过指定的字符进行分离
    s1 = s.split('.')
    print(s1)
    # 倒序输出字符串
    print(s1[::-1])

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

  • .split(sep=’|’) :通过sep参数指定分隔符
c = 'test |title'
print(c.split(sep='|'))

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

  • 通过参数.maxsplit指定最大分割次数
c = 'test |title|python'
print(c.split(sep='|',maxsplit=1))  ##只有一次分割机会,所以只分割前面第一部分,即从左边开始

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

(2).连接与合并

date = '2019-01-15'
# 以-为分隔符进行分离
date1 = date.split('-')
print(date1)

# join:连接; 通过指定的字符进行连接
print(''.join(date1))   ##默认以空格连接
print(':'.join(date1))     # 通过#进行连接

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

8.字符串判断相关操作

  • 判断字符串里每个元素是否为某种类型,一旦有一个元素不满足,就返回False

(1) digit:数字;判断某个字符串是否为数字

  print('123'.isdigit())
    print('123abc'.isdigit())

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

(2)title:标题;判断某个字符串是否为标题(第一个字母大写,其余字母小写)

  print('Hello'.istitle())
    print('HeLLo'.istitle())

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

(3)upper:大写字母;将字符串转换为大写

print('hello'.upper())
# 判断字符串是否为大写
print('hello'.isupper())

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

(4) lower:小写字母

print('HELLO'.lower())
print('HELLO'.islower() )

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

(5) alpha:字母

print('123'.isalpha())
print('abc'.isalpha())

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

(6)alnum:数字或字母

 print('hello123'.isalnum())

运行结果:
在这里插入图片描述
(7)isidentifier():判断是不是合法的标识符
(8)isspace():判断字符串是否全部由空白字符组成(回车、换行、水平制表符)

9、字符串开头结尾的匹配和字符串的替换

(1).匹配开头

 # 定义字符串
    url1 = 'file:///mnt'
    url2 = 'ftp://172.25.254.250/pub'
    url3 = 'https://172.25.254.250/index.html'
    
    # startswith() 表示以...开头
    if url3.startswith('http://'):
        print('获取网页')
    else:
        print('未找到网页')

运行结果:
在这里插入图片描述
(2).匹配结尾

 # 定义字符串
    filename = 'hello.logg'
    # endswith() 表示以...结尾
    if filename.endswith('.log'):
        print(filename)
    else:
        print('error filename')

运行结果:
在这里插入图片描述
(3)字符串的替换

c = 'test |title|python'
print(c.replace('test','kongy'))

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

10、字符串的比较操作

在这里插入图片描述

print('app'>'banana')
print(ord('a'),ord('b'))  ##获取a,b的原始值,即ASSCL码值
print(chr(97),chr(98))   ##求其对应的字符

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

11、字符串的格式化

在这里插入图片描述
1:

name = 'kongying'
age = 18
fruit = 'apple'
print(f'my name is {name},i am {age}yeas old,i like {fruit}')

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

name = 'kongying'
age = 18
fruit = 'apple'
print('my name is %s,i am %d yeas old,i like %s' %(name,age,fruit))

运行结果:
在这里插入图片描述
3:‘’.format()

name = 'kongying'
age = 18
fruit = 'apple'
print('my name is {0},i am {1} yeas old,i like {2}'.format(name,age,fruit))

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

字符串的综合练习

1.判断变量名是否合法

需求:

1.第一个字符是否为字母或者下划线
2.如果是,继续
3.如果不是,报错
4.依次判断除了第一个字符以外的其他字符
5.判度是否为字母、数字或者下划线

分析:

     1.判断变量名的第一个元素是否为字母或者下划线 s[0]
     2.如果第一个元素符合条件,判断除了第一个元素之外的其他元素s[1:]

代码:

while True:
     s = input('变量名: ')
     if s == 'exit':
         print('退出')
         break
     if s[0].isalpha() or s[0] == '_':
         for i in s[1:]:
             if not(i.isalnum() or i == '_'):
                 print('%s变量名不合法' %s)
                 break
         else:
             print('%s变量名合法' %s)
     else:
         print('%s 变量名不合法' %s)

在这里插入图片描述
.根据出勤记录判断是否会被奖赏

    需求:
给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个
字符:
'A' : Absent,缺勤
'L' : Late,迟到
'P' : Present,到场
如果一个学生的出勤纪录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),
那么这个学生会被奖赏。
你需要根据这个学生的出勤纪录判断他是否会被奖赏。
示例 1:
输入: "PPALLP"
输出: True
示例 2:
输入: "PPALLL"
输出: False

代码:

 s = input(‘请输入考勤记录:)
 if s.count('A') <= 1 and s.count('LLL') == 0:
     print(True)
 else:
     print(False)
s = input()
print(s.count('A') <= 1 and s.count('LLL') == 0)

在这里插入图片描述
4.句子反转

需求:

hello westos python

python westos hello

代码:

print(' '.join(input().split()[::-1]))

在这里插入图片描述
5.从第一字符串中删除第二个字符串中所有的字符

需求:

They are students
aeiou

Thy r stdnts

代码:

 s1 = input('s1:')
s2 = input('s2:')
# 遍历字符串s1
for i in s1:
    #  依次判断s1中的每个字符是否在s2中
    if i in s2:
        # replace 表示替换;
        # 将s1中与s2中相同的所有字符,替换为空字符
        s1 = s1.replace(i,'')
print(s1)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值