python判断正负零_python3输出格式化

前言

在写Python的二级题时发现了一个严重的问题,写了半年多的Python居然不会字符串输出的格式化。好在刷了几套二级题,不然上考场可能得傻眼了。之后查官方的文档找到了相应的内容,但是想在那么长的文档不好找,于是在这里将其总结

我目前已知的有三套格式化的方法:

一个是 "%" %()

另外一个是 "{}".format()

还可以 f"{}"

他们虽然形式不太一样,但是所用的规则都是一样的。这里先讲规则,然后在分开给出实例

规则

align

符号

意义

左对齐(默认)

‘>’

右对齐

‘=’

将填充物放入符号(如果有的话)和数字之间

‘^’

居中

这里面一时间看过去不好理解的是 ‘=’ ,可以举个例子

print("{:0=+10}".format(2))

#=====run=====

+000000002

sign

符号

意义

‘+’

表示标志应该用于正数和负数

‘-’

表示标志应仅用于负数(这是默认行为)

’ ’

表示应在正数上使用前导空格,在负数上使用减号。

这个不太理解啥意思,可以看例子

print("{:+}".format(2))

print("{:-}".format(2))

print("{: }".format(2))

print("{:+}".format(-2))

print("{:-}".format(-2))

print("{: }".format(-2))

#=====run=====

+2

2

2

-2

-2

-2

type

这里应该先提到的是None,也就是里面什么都没有。在这种情况下python会自动判断括号内的数据类型,然后直接输出。但是需要注意的是只有str.format() 与 f有效

例子

a = 123

b = "abc"

c = 123.321

print("{} {} {}".format(a, b, c))

print(f"{a} {b} {c}")

print("% % % ", %(a, b, c))

#=====run=====

123 abc 123.321

123 abc 123.321

# 错误

类型(整数)

说明

‘b’

二进制格式。 输出以 2 为基数的数字。

‘c’

字符。在打印之前将整数转换为相应的unicode字符。

‘d’

十进制整数。 输出以 10 为基数的数字。

‘o’

八进制格式。 输出以 8 为基数的数字。

‘x’

十六进制格式。 输出以 16 为基数的数字,使用小写字母表示 9 以上的数码。

‘X’

十六进制格式。 输出以 16 为基数的数字,使用大写字母表示 9 以上的数码。

类型(浮点数)

说明

‘e’

指数表示。 以使用字母 ‘e’ 来标示指数的科学计数法打印数字。 默认的精度为 6。

‘E’

指数表示。 与 ‘e’ 相似,不同之处在于它使用大写字母 ‘E’ 作为分隔字符。

‘f’

定点表示。 将数字显示为一个定点数。 默认的精确度为 6。

‘F’

定点表示。 与 ‘f’ 相似,但会将 nan 转为 NAN 并将 inf 转为 INF。

‘g’

常规格式。 对于给定的精度 p >= 1,这会将数值舍入到 p 位有效数字,再将结果以定点格式或科学计数法进行格式化,具体取决于其值的大小。准确的规则如下:假设使用表示类型 ‘e’ 和精度 p-1 进行格式化的结果具有指数值 exp。 那么如果 m <= exp < p,其中 m 以 -4 表示浮点值而以 -6 表示 Decimal 值,该数字将使用类型 ‘f’ 和精度 p-1-exp 进行格式化。 否则的话,该数字将使用表示类型 ‘e’ 和精度 p-1 进行格式化。 在两种情况下,都会从有效数字中移除无意义的末尾零,如果小数点之后没有余下数字则小数点也会被移除,除非使用了 ‘#’ 选项。正负无穷,正负零和 nan 会分别被格式化为 inf, -inf, 0, -0 和 nan,无论精度如何设定。精度 0 会被视为等同于精度 1。 默认精度为 6。

‘G’

常规格式。 类似于 ‘g’,不同之处在于当数值非常大时会切换为 ‘E’。 无穷与 NaN 也会表示为大写形式。

‘%’

百分比。 将数字乘以 100 并显示为定点 (‘f’) 格式,后面带一个百分号。

对 ‘g’ 的说明

print("{:.2g}".format(2010))

print("{:.2g}".format(2010.06))

print("{:.3g}".format(2010.06))

print("{:.4g}".format(2010.06))

print("{:.5g}".format(2010.06))

print("{:.6g}".format(2010.06))

print("{:.7g}".format(2010.06))

print("{:#.7g}".format(2010.06))

#=====run=====

2e+03 ## .0被忽略 若加上'#'可显示

2.0e+03

2.01e+03

2010

2010.1 ## 四舍五入(注意5是舍去的)

2010.06

2010.06 ## 并不添加 0

2010.060 ## 添加了 0

注意:这里精度计算的是全部的位数

但是格式化 f 的精度计算的是小数点后的位数

说明:表格里被我忽略了 n ,因为文档里说明的特性我没有试出来

补充字符

符号

说明

‘#’

按照我的个人理解就是让输出完整

‘,’

千位分隔符(10,000)

‘_’

千位分隔符(10_000),注意其他进制中是每四个(0x17_4876_e800)

顺序

[[fill]align][sign][#][0][width][grouping_option][.precision][type]

名称

说明

fill

填充的字符(注意配合 ‘’ 使用)

0

看例子

width

宽度(注意小数点也算一个宽度)

grouping_option

千字符

.precision

精度,注意配合type使用

例子

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

print("{:>05}".format(100))

print("{:!>05}".format(100))

#=====run=====

100

00100

!!100

这个位置的 0 十分的奇怪,暂时还没找到原因

各个实例

"{}".format()

这个内置函数有别于另外两个的是:format()里可以看成元组,花括号内可以对其下标。若里面的元素为列表等还可以取值

并且也可以输入字典,默认值

格式化时应该先输入 ‘:’ 再输入需要的格式化字符。并且下标应该在 ‘:’ 前面

例子

print("{1} {0}".format(1,2))

l = [1,2]

print("{0[1]} {0[0]}".format(l))

print("{1:.2f}".format(12, 12.215))

print("{b} {a}".format(a = 123, b = 321))

dic = {"a":123, "b":321}

print("{b} {a}".format(**dic))

#=====run=====

2 1

2 1

12.21 ## 注意5是舍去的

321 123

321 123

f"{}"

这里花括号内一般是填充变量或者算式,直接填数字和字符串没啥意义。

注意格式化应该在变量名之后,并且也是以 ‘:’ 开头。

a = 123.321

print(f"{a:.2f}")

print(f"{1+1}")

#=====run=====

123.32

2

"%s" %("Hello World")

这个和c语言挺像的了。但需要注意的是这里不可以用下标。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值