python 格式化输出

最后一个常见的问题是如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。
在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
常见的占位符有:
占位符
替换内容
%d
整数
%f
浮点数
%s
字符串
%x
十六进制整数
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
# -*- coding: utf-8 -*-
如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:
>>> 'growth rate: %d %%' % 7 'growth rate: 7 %'
name = input("name:")
age = input("age:")
job = input("job:")
info = '''
-------------info %s -------------
name %s
age %
job %s
------------------------
''' % (name, name, age, job)
print(info)
 
 
如果年龄是确定的整形 必须转义成整形,input输入的是字符串
name = input("name:")
age = int(input("age:"))
job = input("job:")
info = '''
-------------info %s -------------
name %s
age %d
job %s
------------------------
''' % (name, name, age, job)
print(info)
 
format()
另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多:
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 'Hello, 小明, 成绩提升了 17.1%'
info2 = '''
-------------info {_name}-------
name {_name}
age {_age}
job {_job}
------------------------
'''.format(_name=name, _age=age, _job=job)
print(info2)
 
info3 = '''
-------------info {0}-------
name {0}
age {1}
job {2}
------------------------
'''.format(name,age,job)
print(info3)
格式化元组遇到的问题
>>> a='1'
>>> b='2','3'
>>> print "%s,%s" % (a,b) 1,('2', '3')
>>> print "%s" % b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> print "%s" % (b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
如上所示,print "%s,%s" % (a,b)时能把元组b格式化成字符串,而在print "%s" % (b)中却出现了typeError却没有问题,请问是什么原因?
PS:用列表b进行两种操作都是成功的
% 操作符的第二个操作对象如果不是一个元组,那么它就只格式化一个值,否则它尝试把元组里每个值都单独格式化。你不可以同样是给它一个元组,有些时候要它当成多个值来格式化,另一些时候又把它当成单一的要格式化的值。
>>>b >>>('2'.'3') >>>print "%s" % b 相当于 >>>print "%s" % ('2','3)
print("%s" % (b,))这样是可以的
实在不习惯可以用 str.format 方法代替。
print('{0}'.format(b))
另外,(b) 不是只包含一个元素 b 的元组,那个括号只是用于提升表达式的优先级,就像 (1 * 2) + 3(2,) + 3 不一样类似。
 
Python终端如何输出彩色字体
 
实现过程:
      终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。
      转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。
 
书写格式:
     开头部分\033[显示方式;前景色;背景色m + 结尾部分:\033[0m
     注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;另外由于表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统都能识别;但是,建议按照默认的格式规范书写。
     对于结尾部分,其实也可以省略,但是为了书写规范,建议\033[***开头,\033[0m结尾。
 
数值表示的参数含义:
显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)
 
常见开头格式
\033[0m            默认字体正常显示,不高亮
\033[32;0m       红色字体正常显示
\033[1;32;40m  显示方式: 高亮    字体前景色:绿色  背景色:黑色
\033[0;31;46m  显示方式: 正常    字体前景色:红色  背景色:青色
 
实例:
  (1)print("\033[1;31;40m您输入的帐号或密码错误!\033[0m")  
  上方代码的输出格式为:字体高亮,红色前景,黄色背景      PS:前景色也就是字体的颜色
    (2)print("\033[0;31m%s\033[0m" % "输出红色字符")
  #上方代码的输出格式为:字体默认,红色前景
posted @ 2018-03-07 08:39  屌丝的IT  阅读(100)  评论(0)    收藏  举报