第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) + ‘\n‘ + (‘%+5d‘ % -3.14))
   +3
   -3   #负号标示出来
>>> 

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

>>> print((‘% 5d‘ % 3.14) + ‘\n‘ + (‘%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:\user\bin\env
>>> 

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结束程序):


原文地址:https://www.cnblogs.com/ananmy/p/12088139.html

时间: 2024-10-17 12:07:35

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

第014讲:字符串:各种奇葩的内置方法( 课后测试题及答案 )

一.字符串的秘密 二.各种内置方法 三.课时14课后习题及答案 一.字符串的秘密 学习了列表和元组,我们知道了分片的概念,事实上也可以应用于字符串上: >>> str1 = "I love fishc" >>> str1[:6] 'I love' 在python中没有字符这个类型,在Python看来,所谓字符,就是长度为1的字符串.当要访问字符串的其中一个字符的时候,只需要索引列表或元组的方法来索引字符串即可: >>> str1[5

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

1.形参和实参 函数从调用的角度来说,分为形式参数和实际 参数.形参是指函数创建和定义过程中小括号里的参数:而实参指得是函数在被调用过程中传递进来的参数.如下所示 >>> def MyFirstFunction(name): '函数定义过程中的name是叫形参' #因为Ta只是一个形式,表示占据一个参数位置 print('传递进来的' + name + '叫做实参,因为Ta是具体的参数值!') >>> MyFirstFunction('小甲鱼') 传递进来的小甲鱼叫做实

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

一.列表.元组和字符串的共同点 1.都可以通过索引得到每一个元素 2.默认索引值总是从0开始 3.可以通过分片的方法得到一个范围内的元素的集合 4.有共同的操作符(重复操作符.成员关系操作符.拼接操作符) 二.序列常见的BIF 1.list():把一个可迭代对象转化为一个列表 list本身作为一个方法,有2中形态:无参数.有参数 无参数,就是生成一个空的列表 >>> list() [] >>> 有参数 >>> a = 'I love Fishc.com

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

0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式). me: def gcd(x): if x <= 1: return str(x) else: return gcd(x//2) + str(x%2) print(gcd(12)) 参考答案: def Dec2Bin(dec): result = '' if dec: result = Dec2Bin(dec//2) return result + str(dec%2) else

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

0.当你听到小伙伴们在谈论“映射”.“哈希”.“散列”或者“关系数组”的时候,事实上他们就是在讨论什么呢? me:字典 1.尝试一下将数据('F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115)创建为一个字典并访问键 'C' 对应的值? me: dict1={'F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115} print(dict1["C"]) 2. 用方括号(“[]”)括起来的数据我们叫列表,那么使用

六、字符串格式化

字符串格式化 问年龄 问性别 问工作 问完之后统一打印出一个格式化的形式 1 # -*- coding:utf-8 -*- 2 name = input("name:") 3 age = input("age:") 4 job = input("job:") 5 #此处看着特别迷糊,可以考虑其他办法 6 #此种写法为拼接形式,每添加一个字符串都会在内存里单独开辟一个空间,相当于创建一个新的变量 7 print("Infomation o

JAVA字符串格式化-String.format()的使用(转)

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参

Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func):    #定义装饰器     de

JAVA字符串格式化-String.format()的使用

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参