如何在Python中打印菱形?

jogvjijk  于 2023-04-08  发布在  Python
关注(0)|答案(5)|浏览(111)

我怎样才能改变这段代码,而不是打印下面的形状,它打印它像一个菱形(菱形)?

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

输出

*
**
***
****
***
**
*
s8vozzvw

s8vozzvw1#

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
****
 ****
  ****
igetnqfo

igetnqfo2#

我更喜欢下面这个,因为它更对称:

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的新(er)格式化语法的一个很好的特性,它允许你动态地指定字段的宽度以及字段的内容:例如'{s:^{f:d}}'.format(s='*'*3, f=5)变为'{s:^5s}'.format(s='***')'{s:^5s}'.format(s='***')变为' *** '

rqmkfv5c

rqmkfv5c3#

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)

    *    
   * *   
  * * *  
 * * * * 
* * * * *
 * * * * 
  * * *  
   * *   
    *
hrysbysz

hrysbysz4#

我想这就是你要找的

for i in range(lines+1):
if i<=middle:
    for j in range(0, (middle-i)):
        print(end=' ')
    for j in range(i):
        print('*',end=' ')
else:
    for j in range(i+middle, lines+1, -1):
        print(end=' ')
    for j in range(i, lines+1):
        print('*', end=' ')
print()
nzk0hqpo

nzk0hqpo5#

这是你想要的吗

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)

输出:

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

相关问题