如何在Python中打印菱形?

时间:2015-04-24 18:19:05

标签: python python-3.x

如何更改此代码而不是打印下面的形状,它会像菱形(菱形)一样打印出来?

def star (m):
    for i in range (m + 1):
        print ("*" * i)
    for i in range ( m + 1 ):
        print ("*" * (m - 1))
        m -= 1

输出

*
**
***
****
***
**
*

4 个答案:

答案 0 :(得分:0)

这是你想要的吗?

def star(m):
    for i in range(1, m + 1):
        print(("*" * i).center(m))
    for i in reversed(range(1, m)):
        print(("*" * i).center(m))

star(10)

输出:

    *
    **
   ***
   ****
  *****
  ******
 *******
 ********
*********
**********
*********
 ********
 *******
  ******
  *****
   ****
   ***
    **
    *

答案 1 :(得分:0)

我更喜欢以下内容,因为它更加对称:

def star(m):
    def star_line(n):
        print('{s:^{f:d}s}'.format(s='*'*n, f=m))

    for i in range(1,m,2):
        star_line(i)
    for i in range(m,0,-2):
        star_line(i)


star(5)
  *  
 *** 
*****
 *** 
  *  

此解决方案使用Python新的(呃)格式化语法的优点,使您能够动态指定字段的宽度以及字段的内容:例如'{s:^{f:d}}'.format(s='*'*3, f=5)变为'{s:^5s}'.format(s='***'),变为' *** '

答案 2 :(得分:0)

lozenge是等边的,rhomboid通常不是。为了说明,我会做一个菱形,但允许它是等边的。

要定义一个函数,首先应指定域,在这种情况下为正整数(或者如果您愿意,则包括0)。

函数通常应该返回一个对象,该对象可以与给定输入的所需输出进行比较。然后,您可以为示例输出编写自动测试。在这种情况下,函数应该生成一个可迭代的字符串。所需的输出最容易表示为元组或字符串列表,并在必要时转换函数输出。

r43 = (
'****',
' ****',
'  ****',
)

def rhom(width, height):
    if not(isinstance(width, int) and width > 0 and
           isinstance(height, int) and height > 0):
        raise ValueError('width and height must be positive ints')
    stars = width * '*'
    for i in range(height):
        yield i * ' ' + stars

out43 = tuple(rhom(4, 3))
print(r43 == out43)
for line in out43:
    print(line)

打印

True
****
 ****
  ****

答案 3 :(得分:0)

def print_lozenge(num):
    str = '*'
    str_2 = str + (num - 1) * ' *'
    size = 2 * num - 1
    for n in range(num):
        print str.center(size, ' ')
        str += ' *' 
    for n in range(num):
        str_2 = str_2[: -2]
        print str_2.center(size, ' ')

print_lozenge(5)

    *    
   * *   
  * * *  
 * * * * 
* * * * *
 * * * * 
  * * *  
   * *   
    *