如何更改此代码而不是打印下面的形状,它会像菱形(菱形)一样打印出来?
def star (m):
for i in range (m + 1):
print ("*" * i)
for i in range ( m + 1 ):
print ("*" * (m - 1))
m -= 1
输出
*
**
***
****
***
**
*
答案 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)
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*