python基础 ---python与C++格式化输出的区别

(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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值