【问题标题】:Create a certain triangle with stars用星星创建一个特定的三角形
【发布时间】:2014-06-28 07:07:18
【问题描述】:

我使用的是 python IDEwing 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)

【问题讨论】:

  • 为了保存运行该代码的任何人 - 这是什么其他形状

标签: python loops python-2.7 infinite-loop


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    由于这似乎是一个基本的编程练习,我认为我们不应该过多地依赖内置函数。下面的函数理解了这个想法。

    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 的打印语句,以至于我忘记了 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')
    

    【讨论】:

    • 请注意,它被标记为 python-2.7,因此您在打印中使用 end= 将无法正常工作...
    • @timgeb 你可以在 python 2.x 中抑制换行符,例如print "foo",(注意逗号)。
    • @jonrsharpe 在测试时我每次打印后仍然是空白。
    • @timgeb 是的,这就是所谓的“软空间”,参见例如stackoverflow.com/questions/255147/…
    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2018-08-26
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多