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