我应该编写最终像这样的程序:Python的净距三角
* *
* *
* *
*
我有一个经常一个编写的代码,但我不知道如何将空间进去。
def triangle(i, t = 0):
if i == 0
return 0
else:
print ' ' * (t + 1) + '*' * (i * 2 - 1)
return triangle(i - 1, t + 1)
请教?
我应该编写最终像这样的程序:Python的净距三角
* *
* *
* *
*
我有一个经常一个编写的代码,但我不知道如何将空间进去。
def triangle(i, t = 0):
if i == 0
return 0
else:
print ' ' * (t + 1) + '*' * (i * 2 - 1)
return triangle(i - 1, t + 1)
请教?
尝试:
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)
这段代码打印:
* *
* *
* *
* *
* *
*
您实际上不需要返回语句因为你没有使用递归函数的结果。只要将'return triangle(i - 1,t + 1)'改成'triangle(i - 1,t + 1)'并且移除'return 0',同时将i == 0改为i <= 0,以防止无限循环如果你传递一个负值 – 2013-05-03 23:18:39
谢谢!我编辑这个 – 2013-05-03 23:21:50
让我们在标签一行一些地区:
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
,这样就可以只用一个*
处理行这应该足以让你更接近了很多解决您的问题。我假设它是作业,所以我不会为你解决它,如果你陷入困境,要求更多的线索。
另外,您在第一个'if'语句中缺少冒号,而您的else语句位于错误的缩进处 – James 2013-05-03 22:43:36
大厦@哈拉齐的答案(因为这让我想起了我早期的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)
*
你应该为此循环使用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
这样做的结果是这样的:
* *
* *
* *
*
你能不同的编辑?我根本无法分辨你在问什么。 – James 2013-05-03 22:34:05
不要乘以'\ *',否则你会得到很多......把另一组空间放在这样的地方:''\ *(t + 1)+'\ *'+''\ *(i \ * 2 - 3)+'\ *'然后您只需要另一个条件来检查当您位于底部并打印1星而不是2 – David 2013-05-03 22:43:53