用星星创建一个特定的三角形

时间:2014-05-10 16:06:37

标签: python loops python-2.7 infinite-loop

我正在使用python IDE wing 4.1版

我正在尝试编写一个只有1个输入的函数,它将是一个整数并返回下一个星形:

  *
 **
***

我尝试使用以下代码,但它提供了另一种形式:

from math import *
from string import *
def tri_1(n):
    x=n*'*'
    i=0
    while i<5:
        x=i*'*'
        i=i+1
        print x

n=input()
tri_1(n)

2 个答案:

答案 0 :(得分:0)

您需要更仔细地考虑算法应该做什么。对于1n范围内的每个整数,您希望打印n-1个空格,后跟n个星号,那么硬编码的5做什么那里?你为什么没有任何空格?鉴于您知道循环次数,为什么要使用while而不是for

实现这一目标的最有效方法是使用内置字符串方法rjust,它用空格填充提供的字符串:

def tri_1(n):
    for i in range(1, n+1):
        print(str.rjust("*"*i, n))

答案 1 :(得分:-1)

由于这似乎是一项基本的编程练习,我认为我们不应该过多依赖内置函数。以下功能可以解决这个问题。

def print_triangle(n):
    for i in range(1, n+1):
        for j in range(n-i):
            print(' ', end='')
        for k in range(i):
            print('*', end='')
        print()

调用print_triangle(3)将打印

  *
 **
***

这个功能稍短,但做同样的事情。

def print_triangle2(n):
    for i in range(1, n+1):
        print(' '*(n-i), end='')
        print('*'*i)

希望有所帮助。

编辑: 谢谢Jon,我已经习惯了Python 3的print语句,我忘了end=''部分除非你使用的是Python 3才能工作。这应该适用于Python 2.7:

import sys
def print_triangle(n):
    for i in range(1, n+1):
        for j in range(n-i):
            sys.stdout.write(' ')
        for k in range(i):
            sys.stdout.write('*')
        sys.stdout.write('\n')

def print_triangle2(n):
    for i in range(1, n+1):
        sys.stdout.write(' '*(n-i))
        sys.stdout.write('*'*i)
        sys.stdout.write('\n')