列表图形打印--------字符串处理经典习题

导文

思想,在平时非业务面试或者打印相关图形时,通常采用列表的形式进行打印,如下就是非常经典的两练习习题,重要的是思想,思维和方式,具体总结如下:

打印图形

这里写图片描述
重点分析

  • 每个行和列要对齐,至于多少宽度要根据自动生成时,计算偏移宽度;
  • 其实每一行就是一个列表,列表采用” “.join(iterable)字符串处理将列表转换成字符串序列,可见” “.join()字符串处理函数的重要性
  • 最核心的就是计算最后一行的长度,即可知道其他行的偏移量的长度。
  • 最后一行才能确定长度

代码 实现

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-12
def tri(m):
    count = " ".join([str(x) for x in range(m,0,-1)])
    length = len(count)
    #计算最后一行长度
    for i in range(1,m):
        cout = " ".join([str(x) for x in range(i,0,-1)])
        print('{:>{}}'.format(cout,length))
    print(count)
print(tri(12))

为方便测试,将空格替换为#可知:
这里写图片描述
代码实现

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-12
def tri(m):
    count = "#".join([str(x) for x in range(m,0,-1)])
    length = len(count)
    for i in range(1,m):
        cout = "#".join([str(x) for x in range(i,0,-1)])
        print('{:>{}}'.format(cout,length))
    print(count)
print(tri(12))

到序打印

这里写图片描述
重点分析

  • 字符串处理将列表转换为字符串,整个第一行就形成str容器
  • 依次递减,采用字符串切片,切片条件是什么?当str[i]等于空格或者其他字符时进行切片
  • 整个列表偏移宽度可通过第一行即可知道序列宽度

代码实现
先采用#号连接更加方便追踪

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-12
def tri(m):
    count = "#".join([str(x) for x in range(m,0,-1)])
    length = len(count)
    print(count)
    for i in range(length):
        if count[i] == "#":
            cout = count[i:]
            print('{:>{}}'.format(cout,length))
print(tri(12))

打印结果
这里写图片描述

替换#号代码实现

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-12
def tri(m):
    count = " ".join([str(x) for x in range(m,0,-1)])
    length = len(count)
    print(count)
    for i in range(length):
        if count[i] == " ":
            cout = count[i:]
            print('{:>{}}'.format(cout,length))
print(tri(12))

运行结果
这里写图片描述

总结

类似解法

  • 通过字符串处理+列表生成式,将列表转换为字符串
  • 通过字符串的长度确定偏移量
  • 递减采用列表或序列切片的方式进行解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值