第015讲:字符串:格式化 (课后测试题及答案)

Posted ananmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第015讲:字符串:格式化 (课后测试题及答案)相关的知识,希望对你有一定的参考价值。

0、Python之.format()方法

format():格式化输出,是Python2.6新增的格式化字符串的方法,把传统的%替换为{}来实现格式化输出(%:格式化操作符),相对于老版的%格式方法,有很多的优点。

优点:

1.format()不需要理会数据类型的问题;在%方法中%s只能替代字符串类型。

2.单个参数可以多次输出,参数顺序可以不相同。

3.填充方式十分灵活,对齐方式十分强大。

4.官方推荐使用的方式

 

format()后面的内容,填入大括号{}中(其中{}花括号表示replacement字段),format()可以接受2种参数:位置参数、变量(关键字)参数,均传递到replacement字段。

按位置参数

1.参数按照位置的顺序填充到字符串中,第一个参数是0,然后是1,2,3.......

>>> {0} love {1}.{2}.format(I,Fishc,com)  #前面的字符串调用format()方法
I love Fishc.com
>>> {1} love {0}.{2}.format(I,Fishc,com)   #注意位置的替换
Fishc love I.com
>>> 

2.不输入数字,直接按照顺序来填充

>>> {} love {}.{}.format(I,Fishc,com)
I love Fishc.com
>>> 

 

>>> #需要输出{},可以用{{}},即{}对自己转义
>>> {{{0} love {1}}}.format(I,you)
{I love you}
>>> 

 

>>> #一个位置参数可以使用2次
>>> {{{1} love {0}.{1}}}.format(fishc,I)
{I love fishc.I}
>>> 

 

按关键字参数

>>> #按照关键字参数,format()中要具体写明参数对应的值
>>> {a} love {b}.{c}.format(I,Fishc,com)
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    ‘{a} love {b}.{c}‘.format(‘I‘,‘Fishc‘,‘com‘)
KeyError: ‘a‘
>>> {a} love {b}.{c}.format(a = I,b = Fishc,c = com)
I love Fishc.com
>>> 

综合位置参数、关键字参数(位置参数必须在关键字的前面,否则就是错误的)

>>> #综合 位置参数和关键字参数
>>> {0} love {b}.{c}.format(I,b = Fishc,c = com)
I love Fishc.com
>>> {a} love {b}.{0}.format(a = I,b = Fishc,com)
SyntaxError: positional argument follows keyword argument
>>> 

 

一、基本字符串操作

字符串都是不可变的。如下所示的项或者分片赋值都是不合法的: 

>>> website = http://www.baidu.com
>>> website[-3:]=org
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
website[-3:]=org
TypeError: str object does not support item assignment
>>>

二、字符串格式化

表:字符串格式化转换类型

 符号         说 明
 %c        格式化字符及其ASCII码
 %s        格式化字符串
 %d        格式化整数
 %o        格式化无符号八进制数
 %x        格式化无符号十六进制数
 %X        格式化无符号十六进制数(大写)
 %f         格式化定点数,可指定小数点后的精度
 %e        用科学计数法格式化定点数
 %g        根据值的大小决定使用%f或者%e
 %G       根据值的大小决定使用%F或者%E
 
 字符串的格式化使用的是:字符串格式化操作符%

 

转换说明符%s 、%d、%x等表示:需要插入转换值的位置。

转换方法:左操作数 % 右操作数

格式化操作符的右操作数可以是任意类型,右操作数是元组,元组的每一个元素都会被单独格式化

>>> %s + %s =%s % (4,5,4+5)
4 + 5 =9
>>>
>>> %s love fishc % I

I love fishc
>>>
>>> format = Hello,%s.%s is beautiful
>>> values = (world,Flower)    #用元组的形式
>>> format % values
Hello,world.Flower is beautiful
>>>

 

基本的转换说明符

(1)%字符:标记转换说明符的开始。

(2)转换标志:-表示左对齐

        +表示在转换值之前加上正号

        ‘ ’空格表示在正数之前保留空格

        0表示在转换数若位数不够用0填充

(3)字段宽度:转换后的字符串指定出字段宽度

(4).(点)后跟精度值:如果转换的是实数,精度值就表示出现在小数点后的位数。

 

(一)简单转换

>>> %s + %s ==%s % (4,5,4+5)
4 + 5 ==9
>>> %s + %s =%s % (4,5,4+5)
4 + 5 =9
>>> price is :$%d % 42
price is :$42
>>> price is :%x % 42
price is :2a
>>> from math import pi
>>> pi is:%f... % pi
pi is:3.141593...
>>> pi is:%.5f % pi
pi is:3.14159
>>> pi is:%i % pi
pi is:3

(二)字段宽度跟精度

>>> from math import pi
>>> ‘pi is:%10f‘ % pi
‘pi is:  3.141593‘ #字段宽10,不足前位补空位
>>> ‘%10.2f‘ % pi
‘      3.14‘      #字段宽10,精度为2
>>> ‘%.2f‘ % pi
‘3.14‘
>>> ‘%.5s‘ % ‘Google help‘  #精度为5
‘Googl‘
>>>  

(三)符号、对齐、用0填充

用0填充

在字段宽度和精度值之前还可以放置一个“标志”,该标志可以是0,加号,减号或者空格,0表示数字将会用0进行填充。

>>> ‘pi is:%010.2f‘ % pi
‘pi is:0000003.14‘
>>>  

注意:在上述例子中的010中,开头的0并不意味着字段宽度说明符为八进制数,只是普通的Python数值。

减号(-)用来左对齐数值

>>> ‘%10.2f‘ % pi
‘      3.14‘
>>> ‘%-10.2f‘ % pi
‘3.14      ‘
>>> 

加号(+):不管是正数还是负数都标示出正负号

>>> print((%+5d % 3.14) + 
 + (%+5d % -3.14))
   +3
   -3   #负号标示出来
>>> 

“ ”空格在正数前面加上空格(正负数的对齐时:很有用)

>>> print((% 5d % 3.14) + 
 + (%5d % -3.14))
    3
   -3
>>> 

 

三、字符串中最常用的方法

1.find()

解释:可以在一个较长的字符串中查找子串,返回子串所在位置的最左端索引(第一次出现的子串),如果没有找到则返回-1.

>>> I love Fishc.com.find(com)
13
>>> title = I love fishc.com
>>> title.find(fishc)
7
>>> title.find(hello)#找不到返回-1
-1
>>> 

注意:如果返回值是0,不是布尔型的0,而是在索引位置0找到了子串。例如:

>>> namestr = $$$ Get Rich Now!$$$
>>> namestr.find($$$)
0
>>> 

find()添加起始点跟结束点参数

>>> namestr
$$$ Get Rich Now!$$$
>>> namestr.find(!$$,1)#只提供起始点
16
>>> namestr.find(!$$)
16
>>> namestr.find(Rich,0,7) #索引位置起始点0,结束点位置7之间没有找到子串
-1
>>> 

2.join()

解释:用来连接序列中的元素,是字符串中很重要的方法,是split()方法的逆方法。

注意:需要被连接的序列元素都必须是字符串!!

>>> list1 = [1,3,4,6,7,9]
>>> seq = +
>>> seq.join(list1)
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    seq.join(list1)
TypeError: sequence item 0: expected str instance, int found
>>> list2 = [2,5,6,9]
>>> seq = +
>>> seq.join(list2)
2+5+6+9
>>> 
>>> dirs = ‘‘,user,bin,env
>>> /.join(dirs)
/user/bin/env
>>> print(C:+\.join(dirs))
C:userinenv
>>> 

 

3.split()

解释:将字符串分割成序列,是join()的逆方法。

>>> This is a good idea!.replace(is,ez)
Thez ez a good idea!
>>> 1+2+3+4+5.split(+)
[1, 2, 3, 4, 5]>>> I love Fishc.com.split( )
[I, love, Fishc.com]
>>> 

 

4.lower()

解释:返回字符串的小写字母版。

>>> title = I love Fishc.com
>>> title.lower()
i love fishc.com
>>> 

 

5.replace()

解释:返回某字符串的所有匹配项均被替换之后得到的字符串。

>>> This is a good idea!.replace(is,ez)   #可以理解为查找并替换
Thez ez a good idea!
>>> 

6.strip()

解释:(1)不加参数是除去字符串两侧的空格(不含字符串中间的空格)

   (2)加参数,是除去两侧的需要去掉的字符

>>>       I love Fishc.com     .strip()#不加参数
I love Fishc.com
>>> 

 加参数,只会去除字符串两侧的字符,对字符串中间没有影响.

>>> ### I love ##Fishc.com ##  hello ####.strip(##)#加参数
 I love ##Fishc.com ##  hello 
>>> 

 

课后习题:

1. 请问以下这行代码会打印什么内容?

>>> {{{1}}}.format(no print,print) #外层{}对中间层{}转义,输出{};中间的{1}对应的format()参数的索引位置是1
{print}
>>> {{1}}.format(no print,print) #这个1被解释掉了
{1}
>>> 

 

2. 以下代码中,a, b, c是什么参数?

关键字参数

>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")
I love FishC.com
>>> 

 

3. 以下代码中,{0}, {1}, {2}是什么参数?

 位置参数

>>> "{0} love {1}.{2}".format("I", "FishC", "com")
I love FishC.com
>>> 

 

4. 如果想要显示Pi = 3.14,format前边的字符串应该怎么填写呢?

>>> "{0}{1:.2f}".format(Pi= ,3.1415)
Pi= 3.14
>>> 

 

动动手:

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

q=True
while q:
    num=input(请输入一个十进制的整数(输入Q结束程序):)
    if num !=Q:
        num=int(num)
        print((十进制->十六进制: %d -> %x) % (num,num))
        print((十进制->八进制: %d -> %o) % (num,num))
        print((十进制->二进制: %d -> ) % num,bin(num))
    else:
        q=False

演示结果:

请输入一个十进制的整数(输入Q结束程序):9
十进制->十六进制: 9 -> 0x9
十进制->八进制: 9 -> 0o11
十进制->二进制: 9 ->  0b1001
请输入一个十进制的整数(输入Q结束程序):

 

 

 

 

 

 

 


以上是关于第015讲:字符串:格式化 (课后测试题及答案)的主要内容,如果未能解决你的问题,请参考以下文章

第016讲:序列!序列! (课后测试题及答案 )

第023024讲:递归:这帮小兔崽子汉诺塔 | 课后测试题及答案

第003讲,插曲之变量和字符串|课后测验及答案

第025讲:字典:当索引不好用时 | 课后测试题及答案

第018讲:函数 灵活即强大(课后测试题及答案 )

第035讲:图形用户界面入门:EasyGui | 课后测试题及答案