[英](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:
* *
* * * *
***** *****
关于我所做的更改的几点说明:
s[0]
、 s[1]
和s[2]
周围的str()
包装器不是必需的,因为它的每个元素都已经是字符串,因此添加str()
包装器只会降低效率。s
列表,或者将其作为需要传递到括号中的参数,否则如果要在代码中的其他地方更改列表,则可能会出现错误。f
字符串而不是常量连接以提高可读性。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.