问题描述
我接到了一个作业,要求打印一个以“*”为框架的等边三角形,在三角形内有一串固定数量的“$”和空格。
示例: 输入高度:9 输入 $ 数:5 输入空格数:2
我迷路了,救命吗?
解决方法
让我们看看它的工作逻辑。最后你会找到代码。
第一个。
如何创建像这样的左侧星形图案: *
*
*
*
首先是每颗星左边有多少个空格等于TOTAL_HEIGHT_OF_PATTERN - CURRENT_HEIGHT_STATUS
。对于给定的示例,让我们以 2nd-line
为例:
TOTAL_HEIGHT_OF_PATTERN = 4
CURRENT_HEIGHT_STATUS = 2
NUMBER_OF_SPACE_ON_LEFT = TOTAL_HEIGHT_OF_PATTERN - CURRENT_HEIGHT_STATUS = 2
第二个。
如何在中间创建这样的 `$` 和 `space` 模式:(底部模式仅用于可视化) *
*$*
*$$$*
* $$$*
*$$$$$ *
*$$$$$ $$*
*$$$$$ $ $*
*$$$ $$$$$$*
在给定高度有多少空间,对于上述系统,它被找到。
空间:0 表示高度@ 1,2,3
空间:1 表示高度 @ 4,5,6
空格:2 表示高度 @ 7,8
与其完全使用循环,不如将它们划分为过程代码。为了制作特定的 enclose-string
,我们可以使用 make_str function
who 逻辑围绕 $
代码:
height = int(input('Height : '))
doller = int(input('Dollor : '))
spaces = int(input('Spaces : '))
def make_str(rem,len_str):
x = 0
s = ''
for _ in range(len_str):
if rem >0:
s += '$'
rem -= 1
else:
s += ' '
x += 1
if x == spaces:
x = 0
rem = 5
return (rem,s)
rem_dollor = doller
for i in range(1,height+1):
num = 2*(i)-3
rem_dollor,str_ = make_str(rem_dollor,num)
if i == 1:
print(' '*(height-i) + '*')
elif i != height and i != 1:
print(' '*(height-i) + '*' + str_ + '*')
else:
print('*'*(2*height-1))
输出:
Height : 9
Dollor : 5
Spaces : 2
*
*$*
*$$$*
*$ $$*
*$$$ $$*
*$$$ $$$$*
*$ $$$$$ $*
*$$$$ $$$$$ *
*****************