如何在水平方向打印由*组成的形状?

时间:2015-05-14 05:22:52

标签: python python-3.x

我已经制作了一个使用*。

打印出形状的功能

我的代码是

def print_saw(tooth_size, number_of_teeth):
"""Print the saw drawing"""
counter_2 = 0
while counter_2 != number_of_teeth:
    counter = 1
    while counter != tooth_size+1:
        print("*" * counter)
        counter = counter + 1
    counter_2 = counter_2 + 1  

还有更多代码。但这是打印锯的功能。这是用python打印的。

>>> print_saw(4, 3)
*
**
***
****
*
**
***
****
*
**
***
****

但我想让它水平打印。像这样。

>>> print_saw(4, 3)
*   *   *
**  **  **
*** *** ***
************

3 个答案:

答案 0 :(得分:1)

不使用格式化的简单方法:

def print_saw(size, number):
    for s in range(size):
        print(('*' * (s + 1) + ' ' * (size - s - 1)) * number)

给出:

print_saw(5, 3)
*    *    *    
**   **   **   
***  ***  ***  
**** **** **** 
***************

答案 1 :(得分:0)

您可以使用字符串格式设置每个“牙齿”的宽度,然后将其乘以牙齿数。

def print_saw(tooth_height, num_teeth, tooth_width=None):
    if tooth_width is None:
        tooth_width = tooth_height  # square unless specified
    for width in range(1, tooth_height+1):
        row = "{{:<{}}}".format(tooth_width).format("*" * width)
        print(row * num_teeth)

样本:

In [2]: print_saw(6, 3)
*     *     *
**    **    **
***   ***   ***
****  ****  ****
***** ***** *****
******************

In [3]: print_saw(4, 6, 5)
*    *    *    *    *    *
**   **   **   **   **   **
***  ***  ***  ***  ***  ***
**** **** **** **** **** ****

这可以通过格式化两次,一次做:

>>> tooth_width = 6
>>> row = "{{:{}}}".format(tooth_width)
>>> row
"{:6}"

另一个完成:

>>> width = 3
>>> row = row.format("*" * width)
>>> row = "***   "
True

然后乘以你想要的牙齿数量

>>> num_teeth = 3
>>> row * 3
***   ***   ***   

答案 2 :(得分:0)

代码如下:“对于每一行,打印所需的牙齿重复,其中包括扩展到牙齿宽度的填充内容。”

def print_saw(size, reps, fill='*'):
    for row in range(1, size + 1):
        tooth = '{content:{width}}'.format(content=row * fill, width=size)
        print(reps * tooth)

具有更多串联和更少字符串乘法的变体:

def print_saw(size, reps, fill='*'):
    while len(fill) <= size:
        print(reps * '{0:{width}}'.format(fill, width=size))
        fill += fill[0]