def diamond(ni):
li = [ i*'*' + (2*(ni-i) - 1)*' ' + (i - i//ni)*'*'
for i in xrange(ni,0,-1)]
li.extend(i*'*' + (2*(ni-i) - 1)*' ' + (i - i//ni)*'*'
for i in range(2,ni+1))
return '\n'.join(li)
print diamond(7)
抽签
^{pr2}$
注意到了吗
li.extend(i*'*' + (2*(ni-i) - 1)*' ' + (i - i//ni)*'*'
for i in range(2,ni+1))
做相同的(少于一行)比
li = [ i*'*' + (2*(ni-i) - 1)*' ' + (i - i//ni)*'*'
for i in xrange(ni,0,-1)]
但反过来,我们可以简化:
def symetric_diamond(ni):
li = [i*'*' + (2*(ni-i) - 1)*' ' + (i - i//ni)*'*'
for i in xrange(ni,0,-1)]
li.extend(li[-2::-1])
return '\n'.join(li)
请注意
print '\n'.join(str(i) for i in xrange(500))
立即显示,因为程序计算字符串'\n'.join(str(i)for i in xrange(500)),然后一次性打印它,而
for i in xrange(500):
print str(i)
显示的时间要长得多,因为计算机一个接一个地打印500个字符串,每次调用print都很长
一。在
还有另一种方法来印钻石,我现在就写。在
加
def format_diamond(nl):
ni = (nl+1)/2
li = ['{:{fill}{align}{width}}'.format((2*(ni-x) - 1)*' ',fill='*',align='^',width=2*ni-1)
for x in xrange(ni,0,-1)]
li.extend(li[-2::-1])
return '\n'.join(li)
->;当nl为偶数时,所有这些函数都给出了nl-1行的菱形。在
编辑
最后,我更喜欢的是:
def symetric_diamond(nl):
'''Returns a diamond of nl lines if nl is odd,
and nl-1 lines if nl is even'''
ni = (nl+1)//2
li = [ (2*ni-1) * '*' ]
li.extend(i*'*' + (2*(ni-i) - 1)*' ' +i*'*' for i in xrange(ni-1,0,-1))
li += reversed(li[0:-1]) # in-place extension
return '\n'.join(li)
其基本思想是决定哪个循环应该打印每边只有一个开始的行。然后修改其他循环以不打印该行(即以2星线结束或开始)。在
改变
到
^{pr2}$另外,您可以去掉最后一行,因为第二个循环独立完成
x
的所有递增操作。在为了可读性的缘故,我也只切换到一种循环。在
例如,您可以使用编写第一个循环(注意:这个循环将而不是运行
x=1
用例,因此您必须使用第二个循环的未修改的版本)。在我很难找到窍门:
抽签
^{pr2}$注意到了吗
做相同的(少于一行)比
但反过来,我们可以简化:
请注意
立即显示,因为程序计算字符串'\n'.join(str(i)for i in xrange(500)),然后一次性打印它,而
显示的时间要长得多,因为计算机一个接一个地打印500个字符串,每次调用print都很长
一。在
还有另一种方法来印钻石,我现在就写。在
加
->;当nl为偶数时,所有这些函数都给出了nl-1行的菱形。在
编辑
最后,我更喜欢的是:
因为就地扩展(有扩展和反转)以及没有可怕的
(i - i//ni)*'*'
你已经学会了如何打印每一行。 现在最后一部分是生成正确的数字序列来驱动行打印。在
相关问题 更多 >
编程相关推荐