字符串
1.字符串认识
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
#字符串的使用
a = 'abcde'
b = "abcde" #单引号和双引号作用一样,但是不能混用
c = '你好啊'
d = a +','+ c #字符串的拼接,可以直接使用 +号链接
A = 5+8 #13
B = '5'+'8' #58 字符串的拼接
s1 = "Let\'s go !" #转义字符用反斜杠
s2 = "Let\\s go" #打印反斜杠本身
str1 = r'C:\now\python' #C:\now\python
str2 = r'C:\now\python\' #使用r时,末尾不能加\ SyntaxError: EOL while scanning string literal
str3 = r'C:\now\python' + '\\' #C:\now\python\ 想要最后加上反斜杠,可以使用这种方式
2.字符串多行输入
#跨越多行的字符串
str1 = '''
小时不识月,
呼作白玉盘。
又疑瑶台镜,
飞在青云端。
'''
print(str1)
'''输出
小时不识月,
呼作白玉盘。
又疑瑶台镜,
飞在青云端。
'''
str2 = '小时不识月,\
呼作白玉盘。\
又疑瑶台镜,\
飞在青云端。'
print(str2)
#小时不识月,呼作白玉盘。又疑瑶台镜,飞在青云端。
str3 = ('小时不识月,'
'呼作白玉盘。'
'又疑瑶台镜,'
'飞在青云端。')
print(str3)
#小时不识月,呼作白玉盘。又疑瑶台镜,飞在青云端。
#分行输入
a= 3 < 4 and \
1 < 2
print(a) #True
b = ( 3 > 4 and
1 < 2)
print(b) #False
3.字符串下标
str2 = 'abc_123'
print(str2[0]) #a
print(str2[7]) #IndexError: string index out of range
print(str2[-1]) #3
print(str2[-8]) #IndexError: string index out of range
4.字符串的内置方法( 字符串的方法及注释):
capitalize() | 把字符串的第一个字符改为大写 |
casefold() | 把整个字符串的所有字符改为小写 |
center(width) | 将字符串居中,并使用空格填充至长度width的新字符串 |
count(sub[,start[,end]]) | 返回sub在字符串里边出现的次数,start和end参数表示范围,可选。 |
encode(encoding='utf-8', errors='strict') | 以encoding指定的编码格式对字符串进行编码。 |
endswith(sub[,start[,end]]) | 检查字符串是否以sub子字符串结束,如果是返回True,否则返回False。start和end参数表示范围,可选。 |
expandtabs([tabsize=8]) | 把字符串中的tab符号(\t)转换为空格,如不指定参数,默认的空格数是tabsize=8。 |
find(sub[,start[,end]]) | 检测sub是否包含在字符串中,如果有则返回索引值,否则返回-1,start和end参数表示范围,可选。 |
index(sub[,start[,end]]) | 跟find方法一样,不过如果sub不在string中会产生一个异常。 |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。 |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False。 |
isdecimal() | 如果字符串只包含十进制数字则返回True,否则返回False。 |
isdigit() | 如果字符串只包含数字则返回True,否则返回False。 |
islower() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回True,否则返回False。 |
isnumeric() | 如果字符串中只包含数字字符,则返回True,否则返回False。 |
isspace() | 如果字符串中只包含空格,则返回True,否则返回False。 |
istitle() | 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回True,否则返回False。 |
isupper() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回True,否则返回False。 |
join(sub) | 以字符串作为分隔符,插入到sub中所有的字符之间。 >>> str5 = 'Fishc' >>> str5.join('12345') '1Fishc2Fishc3Fishc4Fishc5' |
ljust(width) | 返回一个左对齐的字符串,并使用空格填充至长度为width的新字符串。 |
lower() | 转换字符串中所有大写字符为小写。 |
lstrip() | 去掉字符串左边的所有空格 |
partition(sub) | 找到子字符串sub,把字符串分成一个3元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回(‘原字符串’, ’’, ’’) |
replace(old,new[,count]) | 把字符串中的old子字符串替换成new子字符串,如果count指定,则替换不超过count次。>>> str7 = 'i love fishdm and seven' >>> str7.replace('e','E',2) 'i lovE fishdm and sEven' |
rfind(sub[,start[,end]]) | 类似于find()方法,不过是从右边开始查找。 |
rindex(sub[,start[,end]]) | 类似于index()方法,不过是从右边开始。 |
rjust(width) | 返回一个右对齐的字符串,并使用空格填充至长度为width的新字符串。 |
rpartition(sub) | 类似于partition()方法,不过是从右边开始查找。 |
rstrip() | 删除字符串末尾的空格。 |
split(sep=None, maxsplit=-1) | 不带参数默认是以空格为分隔符切片字符串,如果maxsplit参数有设置,则仅分隔maxsplit个子字符串,返回切片后的子字符串拼接的列表。 >>> str7.split () ['i', 'love', 'fishdm', 'and', 'seven'] |
splitlines(([keepends])) | 按照‘\n’分隔,返回一个包含各行作为元素的列表,如果keepends参数指定,则返回前keepends行。 |
startswith(prefix[,start[,end]]) | 检查字符串是否以prefix开头,是则返回True,否则返回False。start和end参数可以指定范围检查,可选。 |
strip([chars]) | 删除字符串前边和后边所有的空格,chars参数可以定制删除的字符,可选。 |
swapcase() | 翻转字符串中的大小写。 |
title() | 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。 |
translate(table) | 根据table的规则(可以由str.maketrans(‘a’,‘b’)定制)转换字符串中的字符。>>> str8 = 'aaasss sssaaa' >>> str8.translate(str.maketrans('s','b')) 'aaabbb bbbaaa' |
upper() | 转换字符串中的所有小写字符为大写。 |
zfill(width) | 返回长度为width的字符串,原字符串右对齐,前边用0填充。 |
s = 'awin38573in0keo'
s1 = s.capitalize() #Awin38573in0keo
s2 = s.casefold() #awin38573in0keo
s3 = s.swapcase() #AWIN38573IN0KEO
s4 = s.center(20) # awin38573in0keo
s5 = s.count('in') #2
s6 = s.encode(encoding='utf-8') #b'awin38573in0keo'
s7 = s.endswith('eo') # True
s9 = s.find('in') #2
s9 = s.find('an') #-1
str1 = 'ok'
str2 = str1.join('12345') #1ok2ok3ok4ok5
5.<鱼C论坛>
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input('请输入需要检查的密码组合:')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length == 0):
passwd = input("您输入的密码为空(或空格),请重新输入:")
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 == 2 or flag_con == 2:
print("中")
else:
print("高")
print("请继续保持")
break
print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位'")
break
6.format() 有两种参数: 位置参数,关键词参数 。 位置参数如下边的{0},{1},{2}. 关键词参数如下边的{a},{b],{c}
#format() 通过{}字段,通过位置参数,对字符串进行格式化整理 a0 = "{0} love {1}.{2}".format("i","fishC","com") print(a0) #i love fishC.com a1 = "{a} love {b}.{c}".format(a="i",b= "fishc",c = "com") print(a1) #i love fishc.com #注意:如果综合位置参数和关键字参数一起使用, # 那么位置参数必须在关键字参数之前,否则会报错。 a2 = "{0} love {b}.{c}".format("i",b= "fishc",c = "com") print(a2) #i love fishc.com
a= '{{0}}'.format('badusijd') print(a) a0= '{{0}}'.format('不打印') print(a0) # {0} 为什么打印出来事{0}呢,因为这个{}和外边的{}相当于'\\'这种感觉 # 所以无论format后边是什么 都不会打印出来 a1 ='{0:.1f}{1}'.format(27.658,'GB') print(a1) #27.7GB # :表示格式化符号的开始
7. % 相当于翻译的感觉
a0 = '%c' % 97 print(a0) #a a1 = '%c %c %c' % (97,98,99) print(a1) #a b c a2 = '%s' % 'I love you' print(a2) #I love you a3 = '%d + %d = %d' % (4,5, 4+5) print(a3)
8.
字符串格式化符号含义
符 号 | 说 明 |
%c | 格式化字符及其ASCII码【>>> '%c' %97 'a'】 |
%s | 格式化字符串 |
%d | 格式化整数 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化定点数,可指定小数点后的精度(小数点后6位) |
%e | 用科学计数法格式化定点数 |
%E | 作用同%e,用科学计数法格式化定点数 |
%g | 根据值的大小决定使用%f活%e |
%G | 作用同%g,根据值的大小决定使用%f或者%E |
9. 格式化操作符辅助指令
符 号 | 说 明 |
m.n | m是显示的最小总宽度,n是小数点后的位数 |
- | 用于左对齐 |
+ | 在正数前面显示加号(+) |
# | 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X' |
0 | 显示的数字前面填充 '0' 取代空格 |
10.字符串转义字符含义
符 号 | 说 明 |
\' | 单引号 |
\" | 双引号 |
\a | 发出系统响铃声 |
\b | 退格符 |
\n | 换行符 |
\t | 横向制表符(TAB) |
\v | 纵向制表符 |
\r | 回车符 |
\f | 换页符 |
\o | 八进制数代表的字符 |
\x | 十六进制数代表的字符 |
\0 | 表示一个空字符 |
\\ | 反斜杠 |