python - Python中的字体图形
问题描述
我是python的初学者,我遇到了这个问题,我正在努力解决它。我应该从字符“X”组成一个星,这是函数ascii_star(size: int) -> None:
size 总是大于 5 的奇数
这是我的代码
导入数学
def ascii_star(size: int) -> 无:
x1_placement = 1
x2_placement = math.floor(size/2)+1
x3_placement = size
for j in range (1, size+1):
if j == math.floor(size/2 + 1):
for _ in range (1, size+1):
print("O", end="")
for i in range (1, size +1):
if i== x1_placement or i == x2_placement or i == x3_placement:
print("X", end="")
continue
print(" ", end="")
print()
x1_placement += 1
x3_placement -= 1
但是在应该只是由XI组成的线的中间线有一个X被推到一边的问题。
有人可以告诉他如何解决这个问题吗?
解决方案
该if j == math.floor(size/2 + 1):
块负责在图像的中间绘制水平线。在这个块执行之后,你继续执行这个for i in range (1, size +1):
块,它会渲染对角线和垂直线。但是这些应该是互斥的——如果你先打印水平线,然后再打印对角线/垂直线,它们将连接在一起,并且线的长度将是预期的两倍。这就是你看到的原因OOOOOOO___X___
。
试着把你for i in range (1, size +1):
放在一个else
块中,这样它就不会在有水平线的行上执行。
import math
size = 7
x1_placement = 1
x2_placement = math.floor(size/2)+1
x3_placement = size
for j in range (1, size+1):
if j == math.floor(size/2 + 1):
for _ in range (1, size+1):
print("O", end="")
else:
for i in range (1, size +1):
if i== x1_placement or i == x2_placement or i == x3_placement:
print("X", end="")
continue
print(" ", end="")
print()
x1_placement += 1
x3_placement -= 1
结果:
X X X
X X X
XXX
OOOOOOO
XXX
X X X
X X X
或者,完全删除您的if j == math.floor(size/2 + 1):
块,并将该条件移动到您的for i in range (1, size +1):
循环中。您将失去为不同方向的线呈现不同字符的能力,但由于您的问题陈述没有明确要求,因此改进简洁可能是值得的。
import math
size = 7
x1_placement = 1
x2_placement = math.floor(size/2)+1
x3_placement = size
for j in range (1, size+1):
for i in range (1, size +1):
if i== x1_placement or i == x2_placement or i == x3_placement or j == math.floor(size/2 + 1):
print("X", end="")
continue
print(" ", end="")
print()
x1_placement += 1
x3_placement -= 1
结果:
X X X
X X X
XXX
XXXXXXX
XXX
X X X
X X X
推荐阅读
- flutter - 在 Flutter 中切换页面时如何保持 Future 的值?
- kotlin - 我可以在本机构建中使用 Kotlin Arrow-lib 和 Quarkus
- nlp - BERT:作为掩码语言模型一部分的输入嵌入权重
- kubernetes - 未能将 Autopilot GKE 集群注册到 Anthos
- php - 如果驱动程序不支持 getColumnMeta,如何使 PHP 优雅地失败
- pytorch - 如何保存 Pytorch 模型?
- c - 在C中的循环外保存值
- c# - 在服务类上具有状态代表属性是一种好的设计吗?
- regex - Reg sub 重复字符不按顺序
- java - RecyclerView 内的按钮