python-格式化输出

本文详细介绍了Python的格式化输出,包括%运算符的使用,如打印字符串、整数、浮点数及其精度控制,以及对齐方式的设定。此外,还探讨了Python的格式化方法,如使用vars()函数和format()函数进行复杂格式化,包括访问对象属性、字典键值、进制转换、字符串对齐和截断。最后,通过实例展示了摄氏度与华氏度转换及序列和的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

格式化输出

% 格式化运算符

1. 打印字符串


>>> a='AAAA'
>>> b='BBBB'
>>> print('a=%s b=%s' %(a,b));
a=AAAA b=BBBB

2. 打印整数

>>> a=10
>>> b=20
>>> print('a=%d b=%d' %(a,b));
a=10 b=20

3. 打印浮点数

>>> a=1.1234
>>> b=3.14159;
>>> print('a=%d b=%d' %(a,b));
a=1 b=3
>>> print('a=%f b=%f' %(a,b));
a=1.123400 b=3.141590

4. 打印浮点数(指定保留小数点位数)

>>> a=1.1234
>>> b=3.14159;
>>> print('a=%.2f b=%.3f' %(a,b));
a=1.12 b=3.142

%f里指定保留小数位数时具有自动四舍五入的功能,比如b=3.14159 使用%.3f格式化之后输出的结果变成了b=3.142


5. 指定占位符宽度

>>> a='ABC'
>>> b='DEFF'
>>> print('a=%4s b=%6s' %(a,b));
a= ABC b=  DEFF
>>> 

还可以指定特定的占位符


>>> a='ABC'
>>> b='DEFF'
>>> d=125
>>> print('a=%4s b=%6s d=%04d' %(a,b,d));
a= ABC b=  DEFF d=0125

指定输出d使用4个字符宽度,如果不够在前面补零,输出字符串时,默认右对齐,其实可以调整的


6.指定占位符宽度,指定对其方式

>>> a='ABC'
>>> b='DEFF'
>>> d=125
>>> print('a=%-4s b=%-6s d=%-06d' %(a,b,d));
a=ABC  b=DEFF   d=125

可以看到在格式字符里面加了减号字符之后,输出的内容变成了左对齐。最后的125后面其实有3个空格字符

其实还可以在运行时动态指定浮点数的精度

python的神奇之处在于它又提供了一种非常方便的语法。只需要在 typecode(这里是f)之前加一个 *,浮点数的精度就用它前面的数字来指定

来个DEOM看看

>>> for i in range(10):
	print('%.*f' %(i,3.14159265358249));
3
3.1
3.14
3.142
3.1416
3.14159
3.141593
3.1415927
3.14159265
3.141592654

还可以更好玩


>>> d=3.14159265358
>>> for i in range(10):
	print('%.11f %%.*%df = %.*f' %(d,i,i,d));
	
3.14159265358 %.*0f = 3
3.14159265358 %.*1f = 3.1
3.14159265358 %.*2f = 3.14
3.14159265358 %.*3f = 3.142
3.14159265358 %.*4f = 3.1416
3.14159265358 %.*5f = 3.14159
3.14159265358 %.*6f = 3.141593
3.14159265358 %.*7f = 3.1415927
3.14159265358 %.*8f = 3.14159265
3.14159265358 %.*9f = 3.141592654

这样就非常直观的看到d=3.14159265358 这个数字经过不同的格式,输出的不同的结果。

使用 String Formatting Method Calls 可以更简洁地完成功能。


>>> for i in range(5):
	'{0:.{1}f}'.format(1/3.0,i);
 
	
'0'
'0.3'
'0.33'
'0.333'
'0.3333'
>>> a=1
>>> b=2
>>> print('a=%(a)d,  b=%(b)d ' % vars());
a=1,  b=2

vars函数是实现返回对象object的属性和属性值的字典对象,在上面的定义里面,%(a)d 表示使用a这变量的值。

测试下看看


>>> a=1
>>> b=2
>>> c=3
>>> d=4
>>> print(vars())
{'__spec__': None, '__package__': None, 'i': 4, 'replay': '\n... Hello World Cup...\n... Germany vs Brazil\n... %(germany)d : %(brazil)d',
 '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, 'd': 4, 'a': 1, 'c': 3, 'b': 2, 
'__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__'}

可以看出来,会输出当前所有的对象的属性和值。

其实我们还可在格式化字符串中访问对象属性和字典键值

>>> import sys
>>> print('My {1[kind]} runs {0.platform}'.format(sys, {'kind': 'pc'}));
My pc runs win32

format()格式化输出

1. 基本用法:

"hello {}".format("python") # 引用一个参数       传字符串
# 输出:hello python

"hello {}".format(1024)                        # 传数字
# 输出:hello 1024

"hello {}".format([1, 2, 3, 4])                # 传列表
# 输出:hello [1, 2, 3, 4]

"hello {}".format((1, 2, 3, 4))                # 传元组
# 输出:hello (1, 2, 3, 4)

"hello {}".format({"name": "chenkia", "age": 18})    # 传字典
# 输出:hello {'name': 'chenkia', 'age': 18}

"hello {}".format({"name", "chenkai", "name", "akai"})    # 传集合
# 输出:hello {'chenkai', 'akai', 'name'}

Python3.6版本之后的新写法:

str = python

print(f"hello {str}" )  # 引用一个变量 

输出:hello python

其它参数选项

字符串的参数使用{NUM}进行表示,0, 表示第一个参数,1, 表示第二个参数, 以后顺次递加;

使用”:”, 指定代表元素需要的操作, 如”:.3”小数点三位, “:8”占8个字符空间等;

还可以添加特定的字母, 如:

‘b’ - 二进制. 将数字以2为基数进行输出.

‘c’ - 字符. 在打印之前将整数转换成对应的Unicode字符串.

‘d’ - 十进制整数. 将数字以10为基数进行输出.

‘o’ - 八进制. 将数字以8为基数进行输出.

‘x’ - 十六进制. 将数字以16为基数进行输出, 9以上的位数用小写字母.

‘e’ - 幂符号. 用科学计数法打印数字, 用’e’表示幂.

‘g’ - 一般格式. 将数值以fixed-point格式输出. 当数值特别大的时候, 用幂形式打印.

‘n’ - 数字. 当值为整数时和’d’相同, 值为浮点数时和’g’相同. 不同的是它会根据区域设置插入数字分隔符.

‘%’ - 百分数. 将数值乘以100然后以fixed-point(‘f’)格式打印, 值后面会有一个百分号.

2.传入多个参数

"My name is {name}, I am {age} years old".format(name="chenkai", age=18) # 别名替换

"My name is {0}, I am {1} years old".format("chenkai", 18)

"My name is {name}, I am {age} years old".format_map({"name": "chenkai", "age": 18})

# 输出:"My name is chenkai, I am 18 years old"

3.进制转换

"{0} in HEX is {0:#x}".format(16)

# 输出:"16 in HEX is 0x10"
"{0} is OCT is {0:#o}".format(16)

# 输出:"16 is OCT is 0o20"

4.对齐字符串

"{:>5}".format(1)        # 设置宽度为5,右对齐(.rjust()方法)

"{:>5}".format(10)      

"{:>5}".format(100)

"{:>5}".format(1000)

# 输出下面的结果

"    1"

"   10"

"  100"

" 1000"
'{:_<10}'.format('test') # 左对齐(.ljust()方法),并且指定"_"填充空白部分

# 输出 'test______'
'{:_^10}'.format('test') # 居中对齐(.center()方法),并且指定"_"填充两侧

# 输出 '___test___'

# 用%格式化字符串不支持居中对齐

5.截断字符串

"{:.5}".format("Hello Python") # 截取前5个字符

# 输出:"Hello"

6.访问对象属性

class Pig(object):

    def __init__(self, name, age, weight):

        self.name = name

        self.age = age 

        self.weight =weight

    def __repr__(self):

        return "Pig name={0}, age={1}".format(self.name, self.age)

pig = Pig("warrior", 26, 100)

print("{0} is {1} years old, {2} kilograms".format(pig.name, pig.age, pig.weight))

# 输出:"warrior is 26 years old, 100 kilograms"

7.时间格式化

from datetime import datetime

'{:%Y-%m-%d %H:%M}'.format(datetime(2018, 5, 19, 21, 00))

# 输出 '2018-05-19 21:00'

8.传入指定参数

"{:{char}{align}{width}}".format("test", char="_", align="^", width="10")

# 输出 "___test___"
from datetime import datetime

dt = datetime(2018, 5, 24, 21, 0)

"{:{dfmt} {tfmt}}".format(dt, dfmt="%Y-%m-%d", tfmt="%H:%M")

# 输出 "2018-05-24 21:00"

摄氏度与华氏度的转化表:F=C∗1.8+32F=C*1.8+32F=C1.8+32

lower,upper=input().split()
lower,upper=int(lower),int(upper)
c=range(lower,upper+1)
for i in c:
    f=i*1.8+32
    print('{0:.0f}\t{1:.2f}'.format(i,f))

注意split()函数的应用以及format控制格式输出。


输入正整数n,输出序列和,保留三位小数
1−23+35−47+…1-\frac{2}{3}+\frac{3}{5}-\frac{4}{7}+\dots132+5374+

n=int(input())
s=0
for i in range(1,n+1):
    if i%2==1:
        p=i/(2*i-1)
    else:
        p=-i/(2*i-1)
    s=s+p
print('{:.3f}'.format(s))

列表推导式实现:

n=int(input())
alist=[i/(2*i-1) if i%2==1 else -i/(2*i-1) for i in range(1,n+1)]
result=sum(alist)
print("{:.3f}".format(result))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值