我应该写一个最终的程序,如:
* *
* *
* *
*
我有为常规代码编写的代码,但我不确定如何在其中加入空格。
def triangle(i, t = 0):
if i == 0
return 0
else:
print ' ' * (t + 1) + '*' * (i * 2 - 1)
return triangle(i - 1, t + 1)
么?
答案 0 :(得分:2)
让我们在一行中标记一些区域:
startSpaces * middleSpaces * endSpaces
对于给定的行,您希望startSpaces
+ 1 + middleSpaces
+ 1 + endSpaces
等于常量。此常量为2*(i+t) + 1
第1行在t=0
之前会有*
个空格
最后一行在t=i
之前会有*
个空格(这里我使用原始的i
,我知道它会通过递归而改变)
那么你能找到一个startSpaces
,middleSpaces
和endSpaces
的模式来为你提供正确的模式吗?
请注意,else if
需要额外的i==1
个案,这样您才能处理只有一个*
的行
这足以让您更接近解决问题。我假设它是作业,所以我不会为你解决,如果你遇到困难,可以寻找更多的线索。
答案 1 :(得分:2)
尝试:
def triangle(i, t = 0):
if i == 0:
print (t+1) *' '+ '*'
else:
print ' ' * (t + 1)+ '*' + ' ' * (i * 2 - 1) + '*'
triangle(i - 1, t + 1)
triangle(5)
此代码打印:
* *
* *
* *
* *
* *
*
答案 2 :(得分:2)
以@kharazi的答案为基础(因为这让我想起了我早期的GWBasic编程,这让我对孩子编程感到兴奋):
def triangle(i, leftShape='*', rightShape='*', bottomShape='*', spaceShape=' ', t = 0):
if i <= 0:
print ((t+1)*spaceShape)+bottomShape+((t+1)*spaceShape)
else:
print (spaceShape*(t + 1))+leftShape+(spaceShape*(i*2-1))+rightShape+(spaceShape*(t + 1))
triangle(i-1, leftShape, rightShape, bottomShape, spaceShape, t+1)
if __name__== '__main__':
triangle(3)
triangle(3, '\\', '/')
triangle(3, '\\', '/', '~')
triangle(5, '╚╗', '╔╝', '╚╦╝')
triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
triangle(-2)
产生以下输出:
triangle(3)
* *
* *
* *
*
triangle(3, '\\', '/')
\ /
\ /
\ /
*
triangle(3, '\\', '/', '~')
\ /
\ /
\ /
~
triangle(5, '╚╗', '╔╝', '╚╦╝')
╚╗ ╔╝
╚╗ ╔╝
╚╗ ╔╝
╚╗ ╔╝
╚╗ ╔╝
╚╦╝
triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
|╚╗|||||||||╔╝|
||╚╗|||||||╔╝||
|||╚╗|||||╔╝|||
||||╚╗|||╔╝||||
|||||╚╗|╔╝|||||
||||||╚╦╝||||||
triangle(-2)
*
答案 3 :(得分:1)
你应该使用for循环来实现这一点,递归有效,但最好不要一直使用它。这就是我所做的:
def GioTri(i):
foo = i - 1
bar = 0
for i in range(i-1):
print ' ' * bar + "*" + " " * (foo*2 - 1) + "*" + " " * bar
foo = foo - 1
bar = bar + 1
print " " * bar + "*" + " " * bar
结果如下:
* *
* *
* *
*