(1)格式化输出的方式有很多种,通常需要格式化输出的都是字符串,简单的可以通过+号或者join函数来处理
(2) linux系统中使用较多的是C风格的输出,用熟了也比较方便
(3)在python3中,主要以format函数来完成字符串的格式化处理
+号与join函数
加号+:
对两个字符串进行连接
join函数:
可以对一些离散的或者有序的序列进行连接处理,可以自定义连接的间隔符
#join函数是字符串的方法
'sep'.join(str)
>>> str1='abc'
>>> str2='def'
>>> print(str1+'+'+str2+'='+str1+str2)
abc+def=abcdef
>>> x=list('abcdefg')
>>> ','.join(x)
'a,b,c,d,e,f,g'
>>> sep=':' #分隔符也可以用变量来代替
>>> sep.join(x)
'a:b:c:d:e:f:g'
>>> import random
>>> x='abcdefghijklmnopqrstuvwxyz'
>>> [''.join(random.sample(x,2)) for _ in range(10)] #也可以使用表达式生成器
['bi', 'we', 'fn', 'oj', 'wx', 'fe', 'bs', 'wd', 'ko', 'by']
C风格的格式化输出
C风格的输出方式在linux系统中应用较多,主要以%号来标识,输出函数使用printf
>>> person=dict(name='xiejiawen',age=25,sex='male',country='China') #此处先定义一个字典,字典其实就是一个个的键值对
>>> print('My name is %s' % person['name']) #通过键来访问字典中的元素,注意key是字符串,因此需要使用引号包围
>>> print('my country is %s' % person['country'])
>>> print("I'm %s years old" % person['age'])
My name is xiejiawen
my country is China
I'm 25 years old
>>> print("%(host)s.%(domain)s" % {'domain':'magedu.com', 'host':'www'}) # 靠名字对应
www.magedu.com
对齐
%+s:在%后面添加+号即可右对齐
%-s:在%后面天加-号即可左对齐
不添加这两个字符时,默认为右对齐方式
>>> print('%09d' % 5) #字符宽度设置为9,右对齐,不够的以0填充
>>> print('%-5d' % 20)
000000005
20 ##20后面其实还有三个空字符
#如果不要减号
print('%09d' % 5)
print('%5d' % 20)
000000005
20 #右对齐20前面有三个空字符
format函数
#expression段用于描述输出格式,后续的str1等字符串用于填充expression段中的空白部分
expression.format(str1[,str2])
位置对应
>>> print('{}-{}'.format('hangzhou','China') + ' is a first_line city') #默认情况下,后面字符串的顺序和前面{}的顺序一一对应
hangzhou-China is a first_line city
>>> print('{1}-{0}'.format('China','hangzhou') + ' is a first_line city') #也可以用索引来指定后续的字符串
hangzhou-China is a first_line city
位置或关键字对应
>>> print("{server} :{1}:{0}".format('8080','192.168.99.100',server='www.baidu.com'))
www.baidu.com :192.168.99.100:8080
访问元素
>>> print('{0[0]} {0[1]}'.format(('hello','world'))) #使用元组定义,然后使用索引来访问。
>>> print('{} {}'.format('hello' , 'world')) #此方式更为方便
hello world
浮点数
# 浮点数
>>> print("{}".format(3**0.5)) # 开方运算
>>> print("{:f}".format(3**0.5)) # 1.732051,精度默认6
>>> print("{:10f}".format(3**0.5)) # 右对齐,宽度10
>>> print("{:2}".format(102.231)) # 宽度为2数字,不过数字的有效位不止2位,此限制无效
>>> print("{:2}".format(1)) # 宽度为2数字,前面添加空格
>>> print("{:.2}".format(3**0.5)) # 1.7 2个数字
>>> print("{:.2f}".format(3**0.5)) # 1.73 小数点后2位
>>> print("{:3.2f}".format(3**0.5)) # 1.73 宽度为3,小数点后2位
>>> print("{:20.3f}".format(0.2745)) # 0.275数字宽度为20位,不够的前面添加空格
>>> print("{:3.3%}".format(1/3)) # 33.333%,由于小数点后就占了三位,因此3位的数字限制无效
1.7320508075688772
1.732051
1.732051
102.231
1
1.7
1.73
1.73
0.275
33.333%
对齐
print("{}*{}={}".format(5, 6, 5*6))
print("{}*{}={:2}".format(5, 6, 5*6)) #{:2}表示宽度为两个字符
print("{1}*{0}={2:3}".format(5, 6, 5*6)) #{2:3}表示填入第三个元素,并且宽度为3,默认右对齐
print("{1}*{0}={2:0>3}".format(5, 6, 5*6)) #{2:0>3}表示右对齐并且占用3个字符宽度
print("{}*{}={:#<3}".format(4, 5, 20)) #{:#<3}左对齐占用3个字符不足的地方使用#号填充
print("{:#^7}".format('*' * 3)) #居中对齐占7个字符宽度,不足的地方两端使用#号填充
bonus
#打印正三角与倒三角
def output_num(n):
for i in range(1,n+1):
for _ in range(n-i+1):
print('{0:3}'.format(' '),end='')
for k in range(i,0,-1):
print('{0:3}'.format(k),end='')
print()
print()
for i in range(1,n+1):
for k in range(i):
print('{0:3}'.format(' '),end='')
for j in range(n-i+1,0,-1):
print('{0:3}'.format(j),end='')
print()
n=int(input('n='))
output_num(n)
n=12
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
12 11 10 9 8 7 6 5 4 3 2 1
12 11 10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1
#打印等腰三角形
def cout(n):
for i in range(1,n+1):
for j in range(n-i+1,1,-1): #每一行循环先打印空格
print('%3s' % ' ',end='')
for k in range(i,0,-1): #每一行循环再打印*号
print('%3d' % k,end='')
for a in range(2,i+1):
print('%3d' % a,end='')
print() #结束当前行的循环
n=int(input('n='))
cout(n)
n=12
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
8 7 6 5 4 3 2 1 2 3 4 5 6 7 8
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10
11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11
12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12
#感兴趣的可以琢磨一下怎么打印倒等腰三角形
12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12
11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11
10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
8 7 6 5 4 3 2 1 2 3 4 5 6 7 8
7 6 5 4 3 2 1 2 3 4 5 6 7
6 5 4 3 2 1 2 3 4 5 6
5 4 3 2 1 2 3 4 5
4 3 2 1 2 3 4
3 2 1 2 3
2 1 2
1