蓝桥杯历届试题-打印十字图-Python实现

打印十字图思路

个人觉得打印题主要是考查找规律的能力和细心,这里还有二维数组的运用吧。思路写在代码的注释中了,直接上码

n = int(input())
# 给边界赋值,方便码字
boundary = 5+(n-1)*2
# 整体图形分为4块,全部初始化为'.',因此只需加'$'即可
data_left_up = [["."]*(boundary) for i in range(boundary)]
data_left_down = [["."]*(boundary) for i in range(boundary)]
data_right_up = [["."]*(boundary) for i in range(boundary)]
data_right_down = [["."]*(boundary) for i in range(boundary)]
# data_left_down = data_left_up.copy这种复制不可调用,无法镜像,type不为list

#设置最大行数为rows的datas数组的行号为a,列号为b以下的那一列为'$'    
def fillRow(a,b,rows,datas):
    for i in range(a,rows):
        datas[i][b] = '$'
#设置最大列数为cols的datas数组的行号为a,列号为b以下的那一行为'$'
def fillCol(a,b,cols,datas):
    for j in range(b,cols):
        datas[a][j] = '$'
"""①和②部分,注意奇偶的关系即可"""
for i in range(2,boundary,2):
    fillRow(i,i-2,boundary,data_left_up)
for i in range(2,boundary,2):
    fillCol(i-2,i,boundary,data_left_up)
for i in range(2,boundary,2):
    data_left_up[i][i-1] = '$'
    data_left_up[i][i] = '$'
    data_left_up[i-1][i] = '$'
"""
③部分,即中间的部分从索引为[2,2]的部分开始,每次行数+2,
列数加1得到那三个位置的右下角那个,
根据这个位置可以容易得到另外两个[行不变,列-1][行-1,列不变]
"""
#左上角已画出,接下来通过镜像得到其他的三个角
for i in range(boundary):
    for j in range(boundary):
        data_right_up[i][j] = data_left_up[i][boundary-1-j]
        data_left_down[i][j] = data_left_up[boundary-1-i][j]
        data_right_down[i][j] = data_left_up[boundary-1-i][boundary-1-j]

# 画出上半的全部,注意重叠对称轴的列
for i in range(boundary):
    for j in range(boundary):
        print(data_left_up[i][j],end="")
    for j in range(1,boundary):
        print(data_right_up[i][j],end="")
    print("")
# 画出下半的全部,注意重叠对称轴的列和列
for i in range(1,boundary):
    for j in range(boundary):
        print(data_left_down[i][j],end="")
    for j in range(1,boundary):
        print(data_right_down[i][j],end="")
    print("")
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Klingx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值