通过在Python中使用嵌套循环绘制星号的倒三角形

时间:2013-03-26 08:31:20

标签: python geometry

我要编写一个程序,从用户那里获得一系列有效输入,然后使用嵌套循环绘制倒三角形。

我已经设法解决了三角形,但我在倒三角形上挣扎。任何人都可以通过打印单个字符*并且不使用* *行长来给我一些关于如何绘制倒三角形的提示吗?

全局常量

L = 10

获取行号

rows = int(input ( 'Enter a number of rows: ' ) )

行数不得少于10或大于100

while rows < 10 or rows > 100:
    if rows < L:
        print( 'The number is too Low.' )
    else:
        print( 'The number is too high.' )
    rows = int(input ( 'Enter the correct value: ' ) )

显示三角形

for r in range(rows):
    for c in range(r + 1):
        print('*', end='')
print()

1 个答案:

答案 0 :(得分:1)

这非常类似于我曾经为课程做过一次的问题,但是我们在C中实现它。实际上,现在回去很酷,在python中重新实现并查看差异。

我们在课堂上遇到的问题非常相似。我的python代码是:

while True:
    rows = input('Enter the number of rows:  ')

    if 3 <= rows <= 33:
        break
    else:
        continue

padding = ' '*rows        
while rows > 0:
    print(padding[rows:] + '*'*rows)
    rows = rows - 1

- 修改如下,打印倒三角形的轮廓:

# print the outline of an inverted triangle:
height = rows

# inner padding for min height (3)
inner_buffer = [0, 1, 3]
while len(inner_buffer) <= rows:
    inner_buffer.append(inner_buffer[-1]+2)

while height > 0:
    outer_padding = ' '*(rows - height)    
    if height == 1:
        print(outer_padding + '*')
    else:
        inner_padding = ' '*(inner_buffer.pop()-2)
        print(outer_padding + '*' + inner_padding + '*')
    height = height - 1

必须有一个更优雅的想要编码这个,但只是一个工作黑客,看看我们是否在正确的轨道上。

以下新版本: - 将产生正三角形的函数,或定义的倒三角形

def get_rows():
    while True:
        rows = input('Enter the number of rows:  ')
        if 3 <= rows <= 33:
            return rows

def triangle(rows, regular=False, invert=True):

    if invert:
        height = -1 * rows
    else:
        height = 0

    # inner padding for min height (3)
    inner_buffer = [0, 1, 3]
    while len(inner_buffer) <= rows:
        inner_buffer.append(inner_buffer[-1]+2)

    level = 0        
    while level <= rows:
        outer_padding = ' '*(rows - abs(height))

        if height == 0:
            print(outer_padding + '*')
        else:
            inner_padding = ' '*( inner_buffer[ abs(height) ] )
            print(outer_padding + '*' + inner_padding + '*')

        height += 1
        level += 1

让我知道:)。