• 第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结束程序):
    
    
  • 相关阅读:
    4月13日
    java线程池开启多线程
    cenos 7 zookeeper Error contacting service. It is probably not running
    io.lettuce.core.RedisCommandTimeoutException: Command timed out
    springboot java jar指定启动的jar外部配置文件
    ApplicationContextAware
    YYYYMMdd和yyyyMMdd的区别
    gpg加解密异常
    第四周学习及读书笔记
    第3章 直流电机的工作原理及特性 学习笔记(二)
  • 原文地址:https://www.cnblogs.com/ananmy/p/12088139.html
Copyright © 2020-2023  润新知