100个python算法超详细讲解:绘制空心菱形

本文详细介绍了如何使用Python编程打印空心菱形图案,通过分析图形规律,分为上半部分和下半部分分别进行打印。文章提供了一种解决思路,包括找出星号和空格的分布规律,并给出了完整的程序代码,最后展示了运行结果。
摘要由CSDN通过智能技术生成
完整版下载超详细Python算法案例讲解100例.zip-Python文档类资源-CSDN下载

1.问题描述
编程打印如图11.12所示的空心菱形图案。

 

2.问题分析
该问题要求绘制空心菱形,在此基础上,还可以添加其他要求,
如尽可能少地使用printf语句,或者由键盘输入正数n,并绘制出有
2*n+1行的空心菱形图案。
那么针对此类问题我们究竟应该从何入手分析呢?观察图11.12可
知,图中每一行和每一列的星号和空格所出现的位置并非杂乱无章
的,而是都呈现出一定的规律。这样就可以将绘制空心菱形的问题转
换为找出这些星号和空格与它们所在行与列之间存在的某种规律的问
题。只要这个规律找到了,那么问题就迎刃而解了。
下面以第5行(n=5)作为对称轴的空心菱形为例来寻找规律。观
察图形和积累的经验告诉我们,空心菱形应该分上下两个部分来打
印,那么菱形的上下两部分和行列之间有什么联系呢?我们仔细来观
察图11.12,首先标示出每一行和每一列的行号和列号,其次寻找上半
部分之间的联系。
图11.12中1~5行的规律如表11.1所示,其中行号用i表示,列号用j
表示。

 

根据表11.1,我们不难写出以下语句:

if j == n + 1 - i or j == n - 1 + i:
print("* ", end="")
else:
print(" ", end="")

 再结合行列的循环关系,得到以下代码:

# 外层循环控制行数,从控制台输入的参数n即为菱形上半个三角形的行数
for i in range(1, n + 1):
for j in range(1, (n + i - 1) + 1):
if j == n + 1 - i or j == n - 1 + i:
print("* ", end="")
else:
print(" ", end="")
print()

接下来,我们观察图11.12中6~9行的规律。为了使寻找到的规律
中和行列号建立的关系数值相对简单且小,我们假定行号重新从1开始
排列,即我们寻找的是下半部分1~4行的规律,具体如表11.2所示。

根据表11.2,我们不难写出以下语句:

if j == i + 1 or j == 2 * n - 1 - i:
print("* ", end="")
else:
print(" ", end="")

 再结合行列的循环关系,得到以下代码:

# 外层循环控制行数,由于下半个三角形比上面的少一行,所以循环变量i的最大值为n-1
for i in range(1, n):
for j in range(1, (2 * n - 1 - i) + 1):
if j == i + 1 or j == 2 * n - 1 - i:
print("* ", end="")
else:
print(" ", end="")
print()

找到空心菱形的规律后,程序就很容易编写了,只需要在核心代
码的基础上再将程序补充完整即可。
3.完整的程序
根据上面的分析,编写程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 绘制空心菱形
def draw(n):
# 外层循环控制行数,从控制台输入的参数n即为菱形上半个三角形的行数
for i in range(1, n + 1):
for j in range(1, (n + i - 1) + 1):
if j == n + 1 - i or j == n - 1 + i:
print("* ", end="")
else:
print(" ", end="")
print()
# 打印下半个三角形
# 外层循环控制行数,由于下半个三角形比上面的少一行,所以循环变量i的最大值为n-1
for i in range(1, n):
for j in range(1, (2 * n - 1 - i) + 1):
if j == i + 1 or j == 2 * n - 1 - i:
print("* ", end="")
else:
print(" ", end="")
print()
if __name__ == "__main__":
n = int(input("请输入菱形对称轴的行数n: "))
draw(n)

4.运行结果
在PyCharm下运行程序,屏幕上提示“请输入菱形对称轴的行数
n:”,此处输入5,则打印出以第5行为对称轴的空心菱形,如图11.13
所示。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lee达森

创作不易,感谢打赏!

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

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

打赏作者

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

抵扣说明:

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

余额充值