我想再次请教这个论坛的Python专家的帮助。任务是创建一个返回三角形图案的程序。但是,必须有一个兄弟姐妹。
示例输入:
Input an Integer:
9
示例输出:
*
**
***
**** *
***** **
****** ***
******* **** *
******** ***** **
********* ****** ***
到目前为止我的代码是:
a = int(input("Input a number? "))
k=a/3
t=a-k
y=a-(k*2)
for i in range(a + 1):
print '*' * i
for i in range(t + 1):
print '*' * i
for i in range(y + 1):
print '*' * i
当我运行此代码时,输出为:
Input a number: 12
*
**
***
****
*****
******
*******
********
*********
**********
***********
************
*
**
***
****
*****
******
*******
********
*
**
***
****
它打印在第一个三角形之后,我的目标是在每个三角形旁边打印..
答案 0 :(得分:2)
制作你的三角形。
def make_triangle(size, siblings, step):
return [['*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - ((i-(step*sib)) if (i-(step*sib) > 0) else 0)) for sib in xrange(siblings)] for i in xrange(1, size+1)]
输出:
>>> for i in make_triangle(9,3,3):
print ''.join(i)
*
**
***
**** *
***** **
****** ***
******* **** *
******** ***** **
******************
或者你可以将它全部保留在函数中:
def make_triangle(size, siblings, step):
return '\n'.join([''.join(line) for line in [['*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - ((i-(step*sib)) if (i-(step*sib) > 0) else 0)) for sib in xrange(siblings)] for i in xrange(1, size+1)]])
>>> print make_triangle(9,3,3)
*
**
***
**** *
***** **
****** ***
******* **** *
******** ***** **
******************
如果你想在它们之间留一个空格:
def make_triangle(size, siblings, step):
return '\n'.join([' '.join(line) for line in [['*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - ((i-(step*sib)) if (i-(step*sib) > 0) else 0)) for sib in xrange(siblings)] for i in xrange(1, size+1)]])
>>> print make_triangle(9,3,3)
*
**
***
**** *
***** **
****** ***
******* **** *
******** ***** **
********* ****** ***
为了好玩(你可以看到非常好的功能):
>>> print make_triangle(13,5,2)
*
**
*** *
**** **
***** *** *
****** **** **
******* ***** *** *
******** ****** **** **
********* ******* ***** *** *
********** ******** ****** **** **
*********** ********* ******* ***** ***
************ ********** ******** ****** ****
************* *********** ********* ******* *****
更有趣:
>>> print make_triangle(13,5,2)[::-1]
***** ******* ********* *********** *************
**** ****** ******** ********** ************
*** ***** ******* ********* ***********
** **** ****** ******** **********
* *** ***** ******* *********
** **** ****** ********
* *** ***** *******
** **** ******
* *** *****
** ****
* ***
**
*
补充:对其工作原理的一些解释:
这是代码以更基本的形式所做的事情:
def make_triangle(size, siblings, step):
out_list = []
for i in xrange(1, size+1):
in_list = []
for sib in xrange(siblings):
if i-(step*sib) > 0:
in_list.append('*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - (i-(step*sib))))
else:
in_list.append('*' * (i-(step*sib)) + ' ' * (size-(step*sib))
out_list.append(in_list)
line_list = []
for in_list in out_list:
line_list.append(' '.join(in_list))
result = '\n'.join(line_list)
return result