使用星号和空格绘制21×20尺寸字母R的技术实现求助
使用星号和空格绘制21×20尺寸字母R的技术实现求助
大家好!我最近在折腾用Python的星号和空格绘制一个21行×20列的字母R,还特意给它加了一圈外围边框。目前我只写出了边框、左侧竖线和顶部横线的部分代码,离想要的效果还差一大截,想请各位大佬帮忙补全剩下的逻辑!
先跟大家描述下我要的目标R样子:整体是21行高、20列宽的区域,外围一圈边框;内部的R要有完整的左竖线、顶部横线,中间有一条从左上到右下的斜线,斜线中间位置还有一条横向短线,最后从横向短线右端点再向下斜出一条线到右下角,就是标准的大写R的形状。
下面是我目前写的半成品代码,后面的逻辑卡壳了,实在不知道怎么补:
rows = 21 # Height of the letter R cols = 20 # Width of the letter R for i in range(rows + 2): # Adding 2 for top and bottom border for j in range(cols + 2): # Adding 2 for left and right border # Print a border of asterisks if i == 0 or i == rows + 1 or j == 0 or j == cols + 1: print("*", end=" ") # Print the letter "R" elif j == 1 and (i > 0 and i < rows + 1): # Left vertical line print("*", end=" ") elif i == 1 and j < cols: # Top horizontal line of R print("*", end=" ") # 后面的逻辑就不知道怎么写了... else: print(" ", end=" ") print()
有没有哪位大佬能帮我把剩下的中间斜线、中间横线和右下角斜线的逻辑补全呀?万分感谢!
我这边帮你补全了完整的代码,亲测能完美实现21×20尺寸的R,每部分都加了详细注释,你可以直接用:
rows = 21 # 字母R的高度(21行) cols = 20 # 字母R的宽度(20列) for i in range(rows + 2): # +2是为了上下边框 for j in range(cols + 2): # +2是为了左右边框 # 绘制外围的边框星号 if i == 0 or i == rows + 1 or j == 0 or j == cols + 1: print("*", end=" ") # 绘制R的左侧竖线 elif j == 1 and (0 < i < rows + 1): print("*", end=" ") # 绘制R的顶部横线 elif i == 1 and (1 <= j <= cols): print("*", end=" ") # 绘制R的中间斜线:从顶部右端(1,20)向下到中间行(11,10) elif i <= rows//2 + 1 and j == cols - (i - 1): print("*", end=" ") # 绘制R的中间横线:连接左竖线和中间斜线的端点 elif i == rows//2 + 1 and (1 <= j <= cols - (i - 1)): print("*", end=" ") # 绘制R的右下角斜线:从中间横线右端(11,10)向下到(21,20) elif i > rows//2 + 1 and j == cols - (rows - i): print("*", end=" ") # 其余位置填充空格 else: print(" ", end=" ") print() # 每行结束后换行
给你解释下关键部分的逻辑:
- 中间斜线:因为总高度是21行,中间行是第11行(从1开始计数),所以我们让j的位置随着i增加逐步左移,刚好从顶部右端点斜到中间行的中点。
- 中间横线:在第11行,从左竖线延伸到中间斜线的端点,形成R的“肚子”部分。
- 右下角斜线:从中间横线的右端点开始,让j的位置随着i增加逐步右移,刚好斜到右下角,完成R的收尾。
你运行这段代码就能得到你想要的效果啦!
备注:内容来源于stack exchange,提问作者AbduRahman
相关产品推荐
相关产品推荐

