P15~P16 第五章 字符串

一、字符串与前面介绍的列表、元组有相似之处

#字符串分片

str1 = " I love fishc.com!"

a = str1[:6]

print(a)

#结果: I lov

#字符串利用索引取值

str1 = " I love fishc.com!"

print(str1[5])

#结果: v

#字符串的拼接

str1 = " I love fishc.com!"

b = str1[:6] + '插入的字符串' + str1[6:]

print(b)

# I lov插入的字符串e fishc.com!

#注意:这种拼接的方式是将变量指向了新的字符串b,旧的字符串str1还在

比较运算符、逻辑运算符、成员关系操作符等操作和列表元组一样,就不在啰嗦

二、各种内置方法

演示常用的方法

casefold()

#casefold() 把字符串的第一个字符改成大写

str1 = "Fishc"

str1.casefold()

print(str1)

# Fishc

count(sub[,[start[,end]])

#查找sub子字符串出现的次数,可选参数

#python 中用方扩号(【】)扩起来表示可选

str1 = "AbcdABCabCabcABCabc"

b = str1.count('ab',0,20)

print(b)

#结果:3

find(sub[,start[,end]]) 和 index()

#查找sub子字符串在字符串中的位置

str1 = "L love fishc.com"

print(str1.find('fishc')) #结果 7

print(str1.find('good')) #结果 -1 #找不到会返回-1

print(str1.index('fishc')) #结果 7

print(str1.index('good')) #找不到,会抛出异常,ValueError: substring not found

join (连接字符串)

#join 是以字符串作为分隔符,插入到sub字符串中的所有字符之间

a = 'x'.join("Test")

print(a) #结果 Txexsxt

b = '_'.join('Fishc')

print(b) #结果 F_i_s_h_c

#使用join链接字符串效率比字符串拼接高

c = "I" + " " +"love" + " " +'fishc.com'

print(c) #结果 I love fishc.com

d = ' '.join(['I','love','fishc.com'])

print(d) #结果 I love fishc.com

replace(old,new[,count])

#替换指定的字符串

str1 = "l love you"

a = str1.replace("you","fishc.com")

print(a) #结果 l love fishc.com

print(str1) #还是原来的,没有变化

split(sep=None,maxsplit=-1)

#join链接字符串

str1 = " ".join(["l",'love','fishc.com'])

print(str1) #l love fishc.com

#拆分字符串

b = str1.split() #默认以空格拆分

print(b) #['l', 'love', 'fishc.com']

str2 = '_'.join("Fishc")

bb = str2.split(sep='_') #sep="X" 自定义分割符

print(bb) #['F', 'i', 's', 'h', 'c']

三、格式化(重点)

format

#format() 方法接受位置参数和关键字参数,二者均传递到一个叫作replacement 字段。

#这个replacement 字段在字符串内由大扩号({})表示

#方式一、位置参数

temp = "{0} love {1}.{2}".format("I","fishc","com")

print(temp) #结果 I love fishc.com

#方式二、关键字参数

temp2 = "{a} love {b}.{c} ".format(a="I",b="fishc",c="com")

print(temp2) #结果 I love fishc.com

#综合位置参数和关键字参数,位置参数必须在关键字之前

temp3 = "{0} love {a}.{b} ".format('I',a = 'Fishc',b = "com")

print(temp3) #结果 I love fishc.com

temp4= "{a} love {b}.{0} ".format(a="I",b="fishc","com") #会报错

print(temp4)

"""

#报错

temp4= "{a} love {b}.{0} ".format(a="I",b="fishc","com")

^

SyntaxError: positional argument follows keyword argument

g = "{0}:{1:.2f} ".format("圆周率",3.14159)

print(g)

#结果:圆周率:3.14

结果分析:位置参数{1} 后面多了一个冒号。在替换域中,冒号表示格式化符号的开始,

“.2” 的意思是四舍五入到保留两位小数点,而f的意思是浮点数,所以打印的结果是3.14

四、格式化操作符: %

举例一

字符串格式化符号含义

#格式化字符

print('%c' %97) #a

#格式化整数

print("%c%c%c%c%c" % (70,105,115,104,67))

a = "%c%c%c%c%c" % (70,105,115,104,67)

print(a) #FishC

#格式化无符号八进制数

b = '%d转换为八进制是:%o'% (123,123) #小写的“o"字母

print(b)

#123转换为八进制是:173

#格式化浮点数字

c = "%f 用科学计数法表示为:%e" %(149500000,149500000)

print(c)

#149500000.000000 用科学计数法表示为:1.495000e+08

举例二

格式化操作符辅助命令

#格式化浮点数,指定小数点后保留一位

a = '%5.1f'% 27.658

print(a) # 27.7

#e计法

b = '%.2e'% 27.658 #保留小数点后两位

print(b) #2.77e+01

c = '%10d'% 5 #10为宽度,在5前面补9个0,总共10位

print(c)

# 5

d = '%-10d'%5 #‘-’表示结果左对齐, 宽度为10,后面补9个0

print(d)

#5 |

E = "%010d" % 5 #用0代替空格,10表示宽度为10位,不足补0

print(E)

#0000000005

F= '%#x'%100 # 小写“x",表示16进制

FF= '%#X'%100 # 大写“X",表示16进制

print(F)

print(FF)

#0X64

#0X64

H = '%d的八进制%#o'%(123,123) #'#"表示在八进制数前显示‘0o’

print(H) #123的八进制0o173

HH = '%d的十六进制%#X'%(123,123) #'#"表示在十六进制数前显示‘0X’

print(HH) #123的十六进制0X7B 大写X

Hx = '%d的十六进制%#x'%(123,123) #'#"表示在十六进制数前显示‘0x’

print(Hx) #123的十六进制0x7B 小写X

课后作业

请写一个密码安全性检查的代码代码:check.py

# 密码安全性检查代码

#

# 低级密码要求:

# 1. 密码由单纯的数字或字母组成

# 2. 密码长度小于等于8位

#

# 中级密码要求:

# 1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合

# 2. 密码长度不能低于8位

#

# 高级密码要求:

# 1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合

# 2. 密码只能由字母开头

# 3. 密码长度不能低于16位

symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''

chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

nums = '0123456789'

passwd = input('请输入需要检查的密码组合:')

# 判断长度

length = len(passwd)

while (passwd.isspace() or length == 0) :

passwd = input("您输入的密码为空(或空格),请重新输入:")

length = len(passwd)

if length <= 8:

flag_len = 1

elif 8 < length < 16:

flag_len = 2

else:

flag_len = 3

flag_con = 0

# 判断是否包含特殊字符

for each in passwd:

if each in symbols:

flag_con += 1

break

# 判断是否包含字母

for each in passwd:

if each in chars:

flag_con += 1

break

# 判断是否包含数字

for each in passwd:

if each in nums:

flag_con += 1

break

# 打印结果

while 1 :

print("您的密码安全级别评定为:", end='')

if flag_len == 1 or flag_con == 1 :

print("低")

elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):

print("高")

print("请继续保持")

break

else:

print("中")

print("请按以下方式提升您的密码安全级别:\n\

\t1. 密码必须由数字、字母及特殊字符三种组合\n\

\t2. 密码只能由字母开头\n\

\t3. 密码长度不能低于16位")

break

2.编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF)

image.png

q = True

while q:

num = input('请输入一个整数(输入Q结束程序):')

if num != 'Q':

num = int(num)

print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))

print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))

print('十进制 -> 二进制 : %d -> ' % num, bin(num))

else:

q = False