Python之字符串

1.字符串的定义方式

代码:

# 字符串的定义
a = 'hello'

# \表示转义
b = 'what\'s up'
# 也可以直接使用双引号
c = "what's up"

print(a)
print(b)
print(c)

运行结果:
Python之字符串
2.字符串的6大特性

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

(1).索引

代码:

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

运行结果:
Python之字符串
(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:])

运行结果:
Python之字符串
(3).重复

代码:

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

运行结果:
Python之字符串
(4).连接

代码:

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

运行结果:
Python之字符串
(5).成员操作符

代码:

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

运行结果:
Python之字符串
(6).for循环遍历 (迭代)

代码:

for i in s:
    print(i)

运行结果:
Python之字符串
示例1:回文数的判断

例如:121就是一个回文数

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

代码:

num = input('num:')

# num[::-1]表示字符串倒序输出
if num[::-1] == num:
    print('这是一个回文数')
else:
    print('这不是一个回文数')

运行结果:
Python之字符串
3.字符串判断大小写和数字

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

代码1:

# digit:数字;判断某个字符串是否为数字
print('123'.isdigit())
print('123abc'.isdigit())

运行结果:
Python之字符串
代码2:

# title:标题;判断某个字符串是否为标题(第一个字母大写,其余字母小写)
print('Hello'.istitle())
print('HeLLo'.istitle())

运行结果:
Python之字符串
代码3:

#  upper:大写字母;将字符串转换为大写
print('hello'.upper())
# 判断字符串是否为大写
print('hello'.isupper())

运行结果:
Python之字符串
代码4:

# lower:小写字母
print('HELLO'.lower())
print('HELLO'.islower() )

运行结果:
Python之字符串
代码5:

# alpha:字母
print('123'.isalpha())
print('abc'.isalpha())

运行结果:
Python之字符串
代码6:

# alnum:数字或字母
print('hello123'.isalnum())

运行结果:
Python之字符串
4.字符串开头结尾的匹配

(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('未找到网页')

运行结果:
Python之字符串
(2).匹配结尾

代码:

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

运行结果:
Python之字符串
5.字符串去除两边空格

(1).去掉空格

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

Python之字符串
(2).去掉指定字符

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

Python之字符串
代码:

# \n表示换行, \t表示横向制表符(8个空格)
s = '\nhello\t\t'
print(s)
# 去掉两边的空格(换行符也表示空格)
print(s.strip())

运行结果:
Python之字符串
6.字符串的搜索与替换

(1)find 搜索

代码:

s = 'hello word hello'

# 注意:下标从0开始,空格也算一个字符
# find 表示找到子串,并返回最小的索引
print(s.find('hello'))
print(s.find('word'))
# rfind 表示找到子串,并返回最大索引
print(s.rfind('hello'))

运行结果:
Python之字符串
(2)replace 替换

代码:

s = 'hello word hello'

# replace 表示将字符串中所有的'hello'替换为'westos'
print(s.replace('hello','westos'))

运行结果:
Python之字符串
7.字符串的对齐

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

Python之字符串

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

Python之字符串

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

Python之字符串

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

Python之字符串
8.字符串的分离和连接

(1).分离

代码:

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

运行结果:
Python之字符串
(2).连接

代码:

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

运行结果:

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

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

Python之字符串
9.字符串的综合练习

1.判断变量名是否合法

需求:

判断用户输入的变量名是否合法:
 1.变量名可以由字母,数字或者下划线组成
 2.变量名只能以字母或者下划线开头

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

代码:

while True:
    s = input('变量名:')
    if s == 'q':
        exit()
    # 判断首字母是否符合变量名要求
    if s[0] == '_' or s[0].isalpha():
        # 依次判断剩余的所有字符
        for i in s[1:]:
            # 只要有一个字符不符合,便不是合法的变量;alnum表示字母或数字
            if not (i.isalnum() or i == '_'):
                print('%s不是一个合法的变量名' % s)
                break
        else:
            print('%s是一个合法的变量名' % s)
    else:
        print('%s不是一个合法的变量名' % s)

运行结果:
Python之字符串
2.打印九九乘法表

(1)用for循环实现

代码:

for i in range(1,10):
    for j in range(1,i+1):
        # 将i和j位置调换即可输出正常的乘法表
        # print('%s*%s=%s\t' % (i, j, i * j), end='')
        print('%s*%s=%s\t' %(j,i,i*j),end='')
    print('\n')

运行结果:
Python之字符串
(2)用while循环实现

代码:

i = 1
while i < 10:
    j = 1
    while j <= i:
        print('%d*%d=%d\t' %(j, i, i*j),end=(''))
        j +=1
    print('')
    i +=1

运行结果:
Python之字符串
3.根据出勤记录判断是否会被奖赏

需求:

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

分析:不超过两个连续的L 即为字符串中出现LLL的次数为0

代码:(方法1)

print("""
        出勤记录规则
    'A' : Absent   缺勤
    'L' : Late     迟到
    'P' : Present  到场
""")

while True:
    c = input('请输入考勤记录:')

    # count() 表示指定字符出现的次数
    if c.count('A') <= 1 and c.count('LLL') == 0 and c != 'q':
        print('True')
    elif c == 'q':
        exit()
    else:
        print('False')

运行结果:
Python之字符串
代码:(方法2)

print("""
        出勤记录规则
    'A' : Absent   缺勤
    'L' : Late     迟到
    'P' : Present  到场
""")

while True:
    c = input('请输入考勤记录:')
    print(c.count('A') <= 1 and c.count('LLL') == 0)

运行结果:
Python之字符串
4.句子反转

需求:

给定一个句子(只包含字母和空格), 将句子中的单词位置反转,
单词用空格分割, 单词之间只有一个空格,前后没有空格。

比如:

 “hello xiao mi”-> “mi xiao hello”

- 输入描述:
> 输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

- 输出描述:
> 对于每个测试示例,要求输出句子中单词反转后形成的句子

- 示例1:

- 输入
    hello xiao mi
- 输出
    mi xiao hello

代码:( 方法1)

# s = input('s:')
#  split 分离; [::-1] 逆序; join 连接
# print(' '.join(s.split(' ')[::-1]))

运行结果:
Python之字符串
代码:(方法2:合成一条语句)

# input 接收用户输入; split 分离; [::-1] 逆序; join 连接
print(' '.join(input('s:').split(' ')[::-1]))

运行结果:
Python之字符串
5.从第一字符串中删除第二个字符串中所有的字符

需求:

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例
如,输入”They are students.”和”aeiou”,
则删除之后的第一个字符串变成”Thy r stdnts.”

- 输入描述:
每个测试输入包含2个字符串

- 输出描述:
输出删除后的字符串

- 示例1:

输入
    They are students.
    aeiou
输出
    Thy r stdnts.

代码:(方法1)

# 定义两个接收用户输入的变量
str1 = input('str1:')
str2 = input('str2:')
# 遍历整个字符串
for i in str1:
    for j in str2:
        if i == j:
            break
    # end 指定结束符,在for语句体中表示不换行输出
    else:
        print(i,end='')

运行结果:
Python之字符串
代码:(方法2)

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)

运行结果:
Python之字符串
6.设计一个程序,帮助小学生练习10以内的加法

需求:

设计一个程序,帮助小学生练习10以内的加法
        详情:
                - 随机生成加法题目;
                - 学生查看题目并输入答案;
                - 判别学生答题是否正确?
                - 退出时, 统计学生答题总数,正确数量及正确率(保留两位小数点);

代码:

# 导入生成随机数的模块
import random

# 定义用来记录回答正确的题数和总的题数
right = 0
counts = 0

# 无限循环
while True:
    # 生成0-10的随机数
    a = random.randint(0,10)
    b = random.randint(0,10)
    #  输出题目
    print('%d + %d =' %(a,b))
    # 接收用户输入的答案
    question = input('请输入您的答案:(q退出)')
    # 计算正确答案
    result = a + b
    # 判断答案是否正确
    if question == str(result):
        print('回答正确')
        right += 1
        counts += 1
    # break表示退出当前循环
    elif question == 'q':
        break
    else:
        print('回答错误')
        # 回答正确的题数与回答错误的题数之和便是总的答题数目
        counts += 1
# 计算正确率(除数不能为0)
if counts == 0:
    percent = 0
else:
    percent = right / counts
    # 两个%%表示一个%
print ('测试结束,共回答%d道题,正确个数为%d,正确率为:%.2f%%' %(counts,right,percent*100))

运行结果:
Python之字符串