绘制直角三角形(Python 3)

时间:2017-03-30 05:12:53

标签: python python-3.x for-loop

我有点问题。我试图根据用户指定的高度和符号使该程序输出一个直角三角形,但每当我输入所需的符号和高度时,程序将输出正确的形状,但是倒置。我在掌握循环和通过反复试验方面遇到了一些困难,这是迄今为止我能想到的最好的。请有人帮助一个兄弟。提前谢谢。

triangle_char = input('Enter a character:\n')
triangle_height = int(input('Enter triangle height:\n'))
print('')

for i in range (len(triangle_char)):
    for j in range (triangle_height):
        print((triangle_char) * triangle_height )
        triangle_height -= 1

当字符为' *'时,此代码将返回此输出和身高是5:

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

输入这些值时的预期输出应为:

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

3 个答案:

答案 0 :(得分:1)

首先你的循环都关闭了;您要将值分配给ij,而不是使用它们。

其次,第一个循环没用。如果您输入3个字符,它将重复该块3次,但变量triangle_height在第一次传递时减少为0,因此在下一次迭代时不会打印任何内容。 只需删除此行

即可

第三:你说你需要反转三角形,所以,不要减少triangle_height,而是在for循环中使用你对j赋值的值而忘记减少变量。 由于范围从0开始计数,因此您需要在print语句中添加1:

triangle_char = input('Enter a character: ')
triangle_height = int(input('Enter triangle height: '))
print('')

for j in range (triangle_height):
    print((triangle_char) * (j + 1))

我还用input()方法中的空格替换了/n,因为它看起来很糟糕。

答案 1 :(得分:0)

你也可以这样做:

triangle_char = input('Enter a character: ')
triangle_height = int(input('Enter triangle height: '))
print('')

j = 0;

while j <= triangle_height :
    print triangle_char * j
    j += 1

答案 2 :(得分:0)

这是一个脚本。我假设多个输入字符意味着多个输出三角形。此外,该高度:0表示每个三角形中的零线。

我今天学到的棘手的事情是int("20.0")没有转换为20;它提出了一个例外。代码通过首先转换为float来解决这个问题。

#!/usr/bin/python3

def triangles(characters, height):
    # We could call int(height) here except that int("20.0") for example raises
    # an error even though there is a pretty clear integer value. To get around
    # that, attempt to convert to float first.
    try:
        lines = float(height)
    except ValueError:
        # If we raise here, the error is like: cannot convert to float. That's
        # confusing, so we let it go.
        lines = height

    # If the value can't be converted to int, this raises an error like: cannot
    # convert to int. If it had already converted to float, this rounds down.
    lines = int(lines)

    for character in characters:
        # Loop will execute no times if lines==0, once if lines==1 and so on.
        for line in range(1, lines + 1):
            print(str(character) * line)
        print("")

if __name__ == '__main__':
    try:
        triangles(input("Enter characters: "), input("Enter height: "))
    except ValueError as error:
        print("Couldn't print triangles:", error)

编辑:添加了示例输出。

$ ./triangles.py 
Enter characters: jk
Enter height: 8
j
jj
jjj
jjjj
jjjjj
jjjjjj
jjjjjjj
jjjjjjjj

k
kk
kkk
kkkk
kkkkk
kkkkkk
kkkkkkk
kkkkkkkk

$ ./triangles.py 
Enter characters: .
Enter height: 3.0
.
..
...

$ ./triangles.py 
Enter characters: f
Enter height: 3.7
f
ff
fff

$ ./triangles.py 
Enter characters: duff
Enter height: duff
Couldn't print triangles: invalid literal for int() with base 10: 'duff'