2017/9/28
索引,切片,字符编码转换函数,字符串的属性方法,字符串格式化表达式,占位符,基于字典的字符串格式化,循环语句
========================================================================
索引index:
python 字符串是不可以改变的"字符"序列
语法:
字符串[整数值]
说明:
序列都可以用索引(index)来访问序列的中对象
序列正向的索引是从0开始的,第二个索引是从1,...,最后一个为len(s)-1
序列的反向索引是从-1开始的,-2代表倒数第二个...,最后一个是-len(s)
实例1:
s = "abcdefg"
s[0] >>>a s[4] >>>e
实例2:
s[-1]>>>g s[-4]>>>d
========================================================================
切片slice(分片)
字符传中,从字符串序列中去除相应的元素,重新组成一个新的字符串序列
切片分为正向切片和反向切片,
当步长为负数时为反向切片
语法:
字符串[开始索引b:结束索引e:(步长s)] #包括索引b,不包括索引e
注:小括号扩起的部分代表可以省略
实例:
s = ["ABCDE"]
>>>s[2:4] >>'CD' #包括索引2,单是不包括索引4,和range(a,b)生成序列类似,包括a,不包括b
>>>s[2:5] >>'CDE'
>>>s[1:] >>'BCDE'
>>>s[0:len(s)] >>'ABCDE'
>>>s[1:] >>'BCDE'
>>>s[:len(s)] >>'ABCDE'
>>>s[0:5:2] >>'ACE'
>>>s[::2] >>'ACE'
>>>s[1:5:2] >>'BD'
>>s[-1:-6:-1] >>'EDCBA'
>>s[:-6:-1] >>'EDCBA'
>>s[::-1] >>'EDCBA'
>>S[-2:-6:-1] >>''
实例:
s = ABCDE
S1 = ABCDE|EDCBA
S1 = s + '|'+ s[::-1] #切片中的反向步长能够实现字符的反向排序
========================================================================
python3中常用的序列函数(当有部分字符时,会转换成编码数再进行比较)
len(s) 返回长度
max(x) 返回序列中最大的元素
min(x) 返回序列中最小的元素
========================================================================
字符编码转换函数:
ord(s) 返回一个字符的编码值(ascii/unicode值)
chr(i) 返回i这个编码值所对应的字符
实例:
ord('a') >>>97 #ascii的编码
ord('A') >>>65 #ascii的编码
ord('0') >>>48 #ascii的编码
chr(10000) >>>铅笔 #unicode编码
chr(10001) >>>钢笔 #unicode编码
整数转为字符串函数
bin(i) 将整数转换为二进制字符串
oct(i) 将整数转换为八进制字符串
hex(i) 将整数转换为十六进制字符串
实例:
0x7d0 >>>2000(十进制)
otc(2000) >>>0o3720(八进制)
bin(20000)>>>0b11111010000
字符串转换函数
str(x) 将对象转为字符串
int(x)
float(x)
complex(x)
bool(x)
实例:
int(3.14) >>3
int("3.14") >>错误 ,这里"3.14"是一个字符
bool("\0") >>True #这个字符虽然看不见(不在屏幕打印任何东西),单确确实实存在
max(5) >>错误
========================================================================
字符串的属性方法:
对象.属性
例:
"123".isnumeric() >>>True 语法正确,123是str类型
"abc".isnumeric() >>>False
2.isnumeric >>>bug 语法错误,2是int类型,这里需要加上""转换为字符串再进行判断
字符串常用的方法(假设字符变量名为s)
方法 说明
s.isdigit() 判断字符串是否全为数字
s.isalpha() 判断字符串是否全为字符(英文字符)
s.islower() 判断字符串是否全为小写字符
s.isupper() 判断字符串是否全为大写字符
s.isspace() 判断字符串是否为空白字符
s.isnumeric() 判断字符串是否为数字(ascii)
------------------------------------------------------------------------------------------
s.center(width[,fill]) 将原字符串居中,左右默认填充空格
s.conunt(sub[,start[,end]]) 获取一个字符串中sub的个数
s.find(sub[,start[,end]]) 获取字符串中sub的索引,失败返回(找到的话返回下标,未找到返回-1)
s.strip() 返回去掉左右空白字符的字符串
s.lstrip() 返回去掉左空白字符的字符串
s.rstrip() 返回去掉右空白字符的字符串
s.title() 生成每个单词首字符大写的字符串
s.upper() 生成将英文转换为大写的字符串
s.lower() 生成将英文转换为小写的字符串
s.replace(old,new[,count]), 将原字符串old用new代替,生成一个新的字符串
实例:
' '.isspace >>>True
'\t\n\r'.isspace >>>True
"abc".center(10) >>>' abc '
"abc".center(10,'@') >>>'@@@abc@@@@'
'asdasdsf'.count('asd') >>>2 (相似 "abc" in "abcdefg": ,但是其只是bool运算,值返回布尔值)
"abcdabcd".conut("a",4,7) >>>1
"abcdababc".find('ab') >>>0
"abcdababc".find('aba') >>>4 (找到的话返回下标,未找到返回-1)
"abcdababc".find('kb') >>>-1
‘ nihai你好 ’.strip() >>>'nihai你好'
"hello world".title() >>>"Hello World"
"hello world".upper() >>>"HELLO WORLD"
"hello world".lower() >>>"hello world"
"my name is xiaoyuxiu".replace('xiaoyuxiu','nihaonihao') >>>'my name is nihaonihao'
"ab abc abcd AB".replace('ab','AB',2) >>>'AB ABc abcd AB'
注意:
注1:空白字符是指 水平制表符\t 换行符\n 空格' '等不可见字符
注2:帮助手册 help(str)
注3:这里只会生成新的字符串,而不是改变原来变量绑定的字符内容
实例:
print('abc\tabc')
print(len('abc\tabc'))
print('abcabc')
print(len('abcabc'))
print('abc abc')
print(len('abc abc'))
tudoudaxia@can:~/lolclear7$ python3 yuan.py
abc abc
7
abcabc
6
abc abc
7
========================================================================
字符串格式化表达式:生成一定格式的字符串
运算符:
语法:格式字符串 % 参数值
格式字符串 % (参数值1,参数值2,...)
实例1:
fmt = "姓名:%s,年龄:%d" ####### %s,%d 格式化占位符
name = "xiaoyuxiu"
age = 23
print(fmt % (name,age))
>>>姓名:xiaoyuxiu,年龄:23
实例2:
"aa %s cc" % "bb">>>'aa bb cc'
========================================================================
占位符:
占位符类型码 意义
%s 字符串(人类识别)
%r 字符串,使用repr()转义,而不是str()(机器识别,比如会对 ' 进行转义,变成 \')(repr()将表达式变成字符,eval()将字符变成表达式)
%c 整数转为单个字符
%d 十进制整数
%o 八进制整数
%x 十六进制整数(字符a-f小写)
%X 十六进制整数(字符A-F大写)
%e 指数型浮点数(e小写),如2.9e+10
%E 指数型浮点数(E大写),如2.9E+10
%f,%F 十进制浮点数形式
%g,%G 十进制形式浮点或指数浮点自动换行
%% 等同于一个字符%
实例:
'%o' % 9 >>>11
'%x' % 200 >>>c8
'%X' % 200 >>>C8
'%c' % 10000 >>>'?'
'%e' % 25400000 >>>'2.540000e+07'
'%E' % 25400000 >>>'2.540000E+07'
'%f' % (2.9*10**8) >>>'290000000.000000'
'%d' % 10 >>>10
'%d%%' % 10 >>>10% #百分号已经不是百分号,而是一个新的转义符号,如果要表示一个百分号,需要两个百分号连在一起完成表示
总结:
%后面的数用%前面的格式重新输出
========================================================================
基于字典的字符串格式化:
"%(name)s 今年 %(age)d 岁" % {"age":23,"name":"xiaoyu"}
#不必进行位置对应,"age""name"会按前面的名字进行对其
占位符合类型码之间的格式语法
-号左对齐
+号右对齐(显示正负号)
0 补零
width 宽度
pricision 精度(仅限在浮点数中使用)
实例:
"%d" % 123 >>>'123'
"%10d" % 123>>>' 123' #补成10个字符,字符右对齐
"%-10d" % 123>>>'123 ' #补成10个字符,字符左对齐
"%010d" % 123>>>'0000000123' #补成10个宽度,空白的地方0补齐
"%7.2f" % 1.2345678>>>' 1.23' #7补成宽度,2表示精度
========================================================================
循环语句:根据一定的条件,重复的执行一个或多个语句包括:while语句 和 for语句。
while:
语法:while 真值表达式:
语句1
...
else:
语句2
...
语法说明:
else子句可以省略
执行顺序:
1.线判断真值表达式是否为True
2.如果第1步为True,则执行语句1后跳到第1步,否则跳到第3步
3.执行else子句
4.结束while语句的执行
实例1:
打印1~10的整数
n =1
while n <= 10:
print(n)
n += 1
实例2:
n =1
while n <= 10:
print(n)
n += 1
bug:IndentationError: unexpected indent
解析:n自增语句缩进,未与p对齐
实例3:
n=1
while n<=10:
print(n)
n += 1
else:
print("循环条件不成立")
print("我是最后一条语句")
实例4:
n=1
while n<=10:
print(n)
n += 1
else:
print("循环条件不成立")
print("我是最后一条语句")
bug:SyntaxError: invalid character in identifier
分析:括号用的是中文,如果正确,括号下面会出现横线提示