<p>以下几点怎么样:</p>
<pre><code>side = int(input("Please input side length of diamond: "))
for x in list(range(side)) + list(reversed(range(side-1))):
print('{: <{w1}}{:*<{w2}}'.format('', '', w1=side-x-1, w2=x*2+1))
</code></pre>
<p>给予:</p>
<pre><code> *
***
*****
*******
*********
***********
*********
*******
*****
***
*
</code></pre>
<p>那么它是如何工作的呢?</p>
<p>首先我们需要一个计数高达<code>side</code>的计数器,然后再返回。没有什么能阻止您将两个范围列表附加在一起,因此:</p>
<pre><code>list(range(3)) + list(reversed(range(3-1))
</code></pre>
<p>这给了你一个列表<code>[0, 1, 2, 1, 0]</code></p>
<p>从这里开始,我们需要为每一行计算出正确的空格和星号:</p>
<pre><code> * needs 2 spaces 1 asterix
*** needs 1 space 3 asterisks
***** needs 0 spaces 5 asterisks
</code></pre>
<p>因此需要两个公式,例如对于<code>side=3</code>:</p>
<pre><code>x 3-x-1 x*2+1
0 2 1
1 1 3
2 0 5
</code></pre>
<p>使用Python的字符串格式,可以同时指定填充字符和填充宽度。这样就避免了使用字符串连接。</p>
<p>如果您使用的是Python 3.6或更高版本,则可以使用<code>f</code>字符串表示法:</p>
<pre><code>for x in list(range(side)) + list(reversed(range(side-1))):
print(f"{'': <{side - x - 1}} {'':*<{x * 2 + 1}}")
</code></pre>