CtrlCV工程師 发表于 2022-1-8 23:04:05

九九乘法表中format函数格式化输出的问题

for i in range(1,10):
    for j in range(1,i+1):
      print("{0:1}*{1:1}={2:2}".format(j,i,j*i),end="")
    print()
在第3行中的“{0:1}”、“{1:1}”、“{2:2}”是什么鬼?
“{2:2}”后面的2个空格有什么用?
format函数怎么用?

傻眼貓咪 发表于 2022-1-8 23:45:29

{位置: 长度} 对应后面的 .format(位置 0,位置 1, 位置 2,...)

CtrlCV工程師 发表于 2022-1-9 08:59:06

傻眼貓咪 发表于 2022-1-8 23:45
{位置: 长度} 对应后面的 .format(位置 0,位置 1, 位置 2,...)

为什么有的代码不是这样的
print("{0}×{1}={2:2d}".format(j,i,j*i), end = ' ')
print(f"{j}×{i}={j*i:2d}", end = ' ')

傻眼貓咪 发表于 2022-1-9 10:08:08

CtrlCV工程師 发表于 2022-1-9 08:59
为什么有的代码不是这样的

都可以,因为 Python 有三种字符串格式化:

1.)%占位符格式化
2.).format() 格式化
3.)f-string 格式化

a = "小甲鱼"
b = 99
c = 87.13
d = True

print("%s 今年 %d 岁,体重是 %.2f,真表示 %r"%(a, b, c, d))   # %占位符格式化
print("{} 今年 {} 岁,体重是 {},真表示 {}".format(a, b, c, d)) # .format() 格式化
print(f"{a} 今年 {b} 岁,体重是 {c},真表示 {d}")               # f-string 格式化小甲鱼 今年 99 岁,体重是 87.13,真表示 True
小甲鱼 今年 99 岁,体重是 87.13,真表示 True
小甲鱼 今年 99 岁,体重是 87.13,真表示 True

CtrlCV工程師 发表于 2022-1-9 10:14:31

傻眼貓咪 发表于 2022-1-8 23:45
{位置: 长度} 对应后面的 .format(位置 0,位置 1, 位置 2,...)

那長度為1和為2有什麼區別

傻眼貓咪 发表于 2022-1-9 10:19:31

CtrlCV工程師 发表于 2022-1-9 10:14
那長度為1和為2有什麼區別

因为好看arr =

print("这是没有对齐输出结果:")
for i in arr:
    print(i, i*i)

# ----------------------------

print()
print("这是有对齐输出结果:")
for i in arr:
    print("{:5} {:10}".format(i, i*i))这是没有对齐输出结果:
12345 152399025
36 1296
196 38416
7 49

这是有对齐输出结果:
12345152399025
   36       1296
196      38416
    7         49

zxx0208 发表于 2022-1-9 10:27:23

这是两种不同的格式化字符串方法:
加 f ,print(f’{i}*{j}={i*j:2d}',end=''),可以直接将字符串里面花括号括起来的变量和表达式打印出来, 输出j*i = i*j
print('{0}*{1}={2:2d}' .format(i,j,i*j),end=''),format方法,是将接收到的位置参数和关键字系数传送到一个字段里,而这个字段在字符串中由花括号表示。在这里,{0}{1}{2}代表的是位置参数,(i,j,i*j)是关键字参数。
不知道我这样解释可曾说清楚了。

woodenhead86 发表于 2022-1-9 10:28:32

print("{0}×{1}={2:2d}".format(j,i,j*i), end = ' ')
2d中的d意思是以十进制显示,你可以把d换成x试试就明白了。

print(f"{j}×{i}={j*i:2d}", end = ' ')
是利用了print(f"{表达式}") 的用法,引用了变量j,i ,及结果。这个答案比上面那个更简洁。

CtrlCV工程師 发表于 2022-1-9 10:40:05

傻眼貓咪 发表于 2022-1-9 10:08
都可以,因为 Python 有三种字符串格式化:

1.)%占位符格式化


為什麼您的format格式化{}裡面什麼都沒有,長度和位置都是可以省略的嗎?
還有就是%占位符的 %s%d%.2f%r是什麼意思

傻眼貓咪 发表于 2022-1-9 10:47:33

CtrlCV工程師 发表于 2022-1-9 10:40
為什麼您的format格式化{}裡面什麼都沒有,長度和位置都是可以省略的嗎?
還有就是%占位符的 %s%d%. ...

{:10_291:} 这个你可以查找小甲鱼的字符串格式化教学,或百度很多教学很详细的用法

傻眼貓咪 发表于 2022-1-9 10:51:58

CtrlCV工程師 发表于 2022-1-9 10:40
為什麼您的format格式化{}裡面什麼都沒有,長度和位置都是可以省略的嗎?
還有就是%占位符的 %s%d%. ...

長度和位置可以省略,除了长度和位置,其实还有很多很多其它参数,只是这里也被省略了。
%s%d%.2f%r 就是占位符(如上,百度搜索有很多教学)
页: [1]
查看完整版本: 九九乘法表中format函数格式化输出的问题