2013-03-26 134 views
1

我必须编写一个程序,该程序从用户处获取一系列有效输入,然后使用嵌套循环绘制倒三角形。在Python中使用嵌套循环绘制星号的倒三角形

我已经设法解决了三角形问题,但我在倒三角形上挣扎着。任何人都可以给我一些关于如何绘制倒三角形的提示,只打印*的单个字符而不使用* * rowlength?

全球恒定

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() 
+0

你不需要空格填充了三角如果它倒过来? – 2013-03-26 08:34:18

+0

为什么不用手工制作倒三角形,并根据高度和线数来计算每一行中空格,星星等数量的变化? – Patashu 2013-03-26 08:42:46

+0

你是什么意思?你能给我举个例子吗? – user2210599 2013-03-26 08:56:34

回答

1

这是非常相似的问题,我有课上做一次,但我们在C中实现它其实挺爽到现​​在回去,在蟒蛇重新实现它,看看差异。

我们在课堂上遇到的问题非常相似。我的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 

让我知道:)

+0

问题是我不允许在整行中使用多个*字符串。 (例如'*'*行长度)。 – user2210599 2013-03-26 09:10:31

+0

好的,嗯,强硬的一个?我修改了上面的答案来打印包含倒三角形的轮廓。这更接近了吗? – 2013-03-26 09:48:15

+0

非常感谢你,我找到了解决方案。 – user2210599 2013-03-27 04:53:08