繁体   English   中英

(Python)如何在直线上打印一些东西

[英](Python) How to print something in a straight line

我创建了“星” function 来打印三角形星。

我想创建 2 个彼此相邻的三角形星,如下图所示:

图片

但我的 function 只打印一颗三角星。

仅使用“星”function,我怎样才能制作 2 个三角形星?

s = ["*","* *","*****"]
def star(startpoint):   
     print(" "*(startpoint)+str(s[0]))
     print(" "*(startpoint-1)+str(s[1]))
     print(" "*(startpoint-2)+str(s[2]))

def star2(startpoint):
     print(" "*(startpoint)+str(s[0]),end='')
     print(" "*(startpoint+k)+str(s[0]))
     print(" "*(startpoint-1)+str(s[1]),end='')
     print(" "*(startpoint-1+k)+str(s[1]))
     print(" "*(startpoint-2)+str(s[2]),end='')
     print(" "*(startpoint-2+k)+str(s[2]))

如果您能帮助我,我将不胜感激。

我真的不知道如何使用您提供的star function 来实现这一点,但是有一种方法可以大大简化star2 function:

def star(startpoint, num):
    s = ["*", "* *", "*****"]
    print(f"{' ' * startpoint}{s[0]}{' ' * startpoint}" * num)
    print(f"{' ' * (startpoint - 1)}{s[1]}{' ' * (startpoint - 1)}" * num)
    print(f"{' ' * (startpoint - 2)}{s[2]}{' ' * (startpoint - 2)}" * num)

star(3, 2)

Output:

   *      *   
  * *    * *  
 *****  ***** 

关于我所做的更改的几点说明:

  1. s[0]s[1]s[2]周围的str()包装器不是必需的,因为它的每个元素都已经是字符串,因此添加str()包装器只会降低效率。
  2. 最好function 中定义s列表,或者将其作为需要传递到括号中的参数,否则如果要在代码中的其他地方更改列表,则可能会出现错误。
  3. 使用f字符串而不是常量连接以提高可读性。
  4. 最后,可以使用内置的enumerate()方法遍历s列表,而不是硬编码其索引,但对于仅三个值不是非常必要:
def star(startpoint, num):
    s = ["*", "* *", "*****"]
    for i, v in enumerate(s):
        print(f"{' ' * (startpoint - i)}{v}{' ' * (startpoint - i)}" * num)

star(3, 2)

当然,有多种方法可以解决您的问题。

不直接打印三角形的字符可能是最简单的。

相反,我会将它们缓冲在一个列表中,并在最后打印结果行。

我使用text = [[" " for _ in range(80)] for _ in range(5)]初始化 output 缓冲区,并通过两次调用我的star方法将两个三角形放在此缓冲区中。

def star(lines, start_point, height, marker="*"):
    """
    Fill `lines` with a triangle

    :param lines: A list of list of strings
    :param start_point: The location of the triangle's top
    :param height: The height of the triangle
    :param marker: The character to use to write the triangle

    :return: `lines` for convenience, but editing happens inplace.
    """
    x1 = start_point[0]
    x2 = x1
    y = start_point[1]
    for i in range(height):
        lines[y][x1] = marker
        lines[y][x2] = marker
        y += 1
        x1 -= 1
        x2 += 1
    for x in range(x1, x2 + 1):
        lines[y][x] = marker

    return lines


if __name__ == '__main__':
    text = [[" " for _ in range(80)] for _ in range(5)]
    star(text, (10, 0), 2)
    star(text, (16, 0), 2)

    for line in text:
        print("".join(line))

Output:

      *     *                                                               
     * *   * *                                                              
    ***** *****  

请注意,您可以轻松更改三角形的位置、高度和标记:

star(text, (10, 1), 2)
star(text, (20, 0), 4, "o")

结果是

                o                                                           
      *        o o                                                          
     * *      o   o                                                         
    *****    o     o                                                        
            ooooooooo                                                       

这是一个简单的代码来绘制相邻的 n 个三角形:

def star(startpoint, n=1):
    s = ["  *   "," * *  ","***** "]
    print (startpoint*" "+n*str(s[0]))
    print (startpoint*" "+n*str(s[1]))
    print (startpoint*" "+n*str(s[2]))
     
star(15, 4)

Output 是:

         *     *     *     *   
        * *   * *   * *   * *  
       ***** ***** ***** ***** 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM