You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用星号和空格绘制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()  # 每行结束后换行

给你解释下关键部分的逻辑:

  1. 中间斜线:因为总高度是21行,中间行是第11行(从1开始计数),所以我们让j的位置随着i增加逐步左移,刚好从顶部右端点斜到中间行的中点。
  2. 中间横线:在第11行,从左竖线延伸到中间斜线的端点,形成R的“肚子”部分。
  3. 右下角斜线:从中间横线的右端点开始,让j的位置随着i增加逐步右移,刚好斜到右下角,完成R的收尾。

你运行这段代码就能得到你想要的效果啦!

备注:内容来源于stack exchange,提问作者AbduRahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:49:35