许多代码能实现 菱形打印,but python 我只用三..哦不,准确来说两行
num = eval(input())
for i in range(-num+1,num):
print(' '* abs(i)+'*' * ((num*2-1)-abs(i)*2))
代码解析:
首先我们知道菱形是个对称图形,正与反 刚好利用python 特有的
(负数,正数)区间 来实现
(-num,num)
并且我们知道 python for循环是个开区间。故而
右边的开区间无需 -1。例如num = 3 , 正方向则是 0,1,2
左边的区间恰恰相反 , 是从指定数字起始的故而需要 +1。
例如输入3 , 此时
-3+1 的循环则为 -2,-1,0
保证了菱形对称行的特点 -2,-1,0,1,2(有点像 坐标系的感觉)
接下来看print里边的
' ' * ? 字符串加 乘法符号 代表 对当前 字符串 复制 若干个 然后拼接一起
例如 'Q' * 3 = 'QQQ'
abs() 函数代表返回 绝对值,负数无法正常与 字符串操作,结果会有点意外
(自己尝试,嘿嘿)
这段代码需要动点脑子
'*' * ((num*2-1)-abs(i)*2))
菱形 是奇数边 和 奇数个字符为对称轴,去除对称轴然后分两边。例如 num = 5 ,对称轴为 9个字符,向外拓展就是 7, 5, 3 , 1 (奇数列)对应每行输出字符数。而空格数是 2,4,6,8(偶数列)
发现没有 !!!
对称轴 减去 字符数 就是 空格数
对称轴 减去 空格数 就是 字符数
(相爱相杀的奇偶)
那么空格数由谁控制呢,不就是区间嘛。 记得 -2,-1,0,1,2 ,吗。乘以 2 不就是 空格数
总字符数 = num*2-1
减去 区间内的 每个值 abs(i) * 2 得到结果
最后,觉得好 点个赞呗
本文介绍用Python实现菱形打印的代码,仅需两行。通过利用Python特有的正负区间实现菱形对称,解析了代码中循环区间、字符串乘法、绝对值函数的使用,还阐述了空格数和字符数的关系,即对称轴减去字符数是空格数,减去空格数是字符数。
537

被折叠的 条评论
为什么被折叠?



