首页 > 解决方案 > 打印直角和等腰三角形

问题描述

我正在尝试从一个输入的奇数打印一个直角和等腰三角形。我可以让它打印一个或另一个,但是当我尝试打印两者时,它会打印出如下内容:

  ****
**********
    ***
***********
     **
************
      *
*************

到目前为止,我的代码是:

row = int(input("enter row:"))
if row %2 ==0 or row<=0:
    print("enter an odd positive number")
else:
    for i in range(row) :
        #print("right angle",end="")
        #print("\n")
        print (" "*i+"*"*(row-i))
        
#print("isoscoles")
#print (" "*i+"*"*(row+i))

如果我输入

print ("right angle "*i+"*"*(row-i))

我明白了

right angle right angle right angle right angle ***
right angle right angle right angle right angle right angle **
right angle right angle right angle right angle right angle right angle *

我想做的是:

Enter an odd positive integer: 7

Right-Angled Triangle:
*******
 ******
  *****
   ****
    ***
     **
      *

Isosceles Triangle:
   *
  ***
 *****
*******

我很感激一些帮助,因为我的头都融化了 XD

标签: pythonpython-3.xloops

解决方案


这段代码可以工作:

# loop till a valid answer is given
while True:
    # this may raise ValueError if not a valid integer; optionally
    # add try ... except ...
    n = int(input('Enter an odd positive integer:'))

    if n % 2 != 0 and n > 0:
        # exit while loop
        break

print()
print('Right-Angled Triangle')
# build and print a string with decreasing amount of stars
for i in range(n):
    print('*' * (n - i))
# build and print a string with decreasing amount of stars, but also
# print an increasing amount of space in front
for i in range(n):
    print(' ' * i, '*' * (n - i), sep='')

print()
print('Isosceles Triangle')
# loop starting at 1 increasing 2 at a time
for i in range(1, n+1, 2):
    print(' ' * ((n - i) // 2), '*' * i, sep='')

输出:

Enter an odd positive integer:7

Right-Angled Triangle
*******
******
*****
****
***
**
*
*******
 ******
  *****
   ****
    ***
     **
      *

Isosceles Triangle
   *
  ***
 *****
*******

推荐阅读