2015-10-14 98 views
3

首先定义一个菱形我定义两种功能。一个使具有奇数(3,5,7 ...)基b向上的三角形,并置于一个单位远离左侧。然后是另一个做同样的事情,但与基地向下的三角形。分别称它们为triup和trido。我们得到:由两个三角形

def triup(a,b): 
    c=b 
    a=a 
    for i in range(1,b+1): 
     print(a*" "+c*'*') 
     c-=2 
     a+=1 
     if c==-1: 
      break 

def trido(a,b): 
    c=1 
    a=a+round((b-1)/2) 
    for j in range(1,b+1): 
     print(a*" "+c*"*") 
     c+=2 
     a-=1 
     if c==b+2: 
      break 

现在我想通过结合这两个函数做一个菱形。所以首先我尝试过:

def rhomb(a,b): 
    print(trido(a,b)) 
    print(triup(a,b)) 

其中两次打印“无”。此外,我必须改变,以便我不是基地两次,但我不能改变三角形的定义。我该如何去解决这个问题?如果你以后要使用的字符串,串连每串要打印在代码中添加一个新行,通过返回的实际价值也将删除无是你在看到任何提示,将是有益的

+0

你的函数返回没有因此受到返回None默认情况下,不要打印函数调用,不打印a ppear –

+0

@PadraicCunningham我试过回报为好。但随后的菱形功能只是打印从triup环路trido环和第一个“结果”的第一个“结果”。 – Lozansky

+0

你不能在循环回来,如果你想加入两个输出然后CONCAT每个字符串,并返回连接字符串,而不是你的破 –

回答

2

您需要返回值的输出你实际上并没有返回值不是蟒蛇默认无:

def triup(a, b): 
    c = b 
    out = "" 
    for i in range(1, b + 1): 
     out += a * " " + c * '*' + "\n" 
     c -= 2 
     a += 1 
     if c == -1: 
      return out 
    return out 


def trido(a, b): 
    c = 1 
    a += round((b - 1)/2) 
    out = "" 
    for j in range(1, b + 1): 
     out += a * " " + c * "*" + "\n" 
     c += 2 
     a -= 1 
     if c == b + 2: 
      return out 
    return out 

您可以将两个输出,做任何你与他们喜欢的:

In [10]: a,b = triup(5,5),trido(5,5) 

In [11]: print(a) 
    ***** 
     *** 
     * 


In [12]: print(b) 
     * 
     *** 
    ***** 


In [13]: print(b+a) 
     * 
     *** 
    ***** 
    ***** 
     *** 
     * 
In [14]: print(a + b) 
    ***** 
     *** 
     * 
     * 
     *** 
    ***** 
+0

谢谢!你能解释一下吗?有没有办法打印triup或trido没有基地(这样它不会在菱形中重复)? – Lozansky

+0

以下是我的尝试: def rhomb(a,b): print(trido(a,b)+“”+ triup(a,b-2)) 添加的空间仅适用于第一行triup虽然。我该如何解决这个问题? – Lozansky