【问题标题】:How to create a numeric triangle with user input in python?如何在python中使用用户输入创建一个数字三角形?
【发布时间】:2015-02-04 18:13:57
【问题描述】:

我必须回答这个问题:编写一个 Python 函数 triangle(n),它接受一个整数参数 n 并打印一个 n 层的数字三角形,如以下示例所示。测试你的答案:1、2、5、9 和 14。

 triangle(7)
 1
 12
 123
 1234
 12345
 123456
 1234567

 triangle(14)
 1
 12
 123
 1234
 12345
 123456
 1234567
 12345678
 123456789
 1234567890
 12345678901
 123456789012
 1234567890123
 12345678901234

除了使用列表之外,我不知道该怎么做。

def triangle(n):
    line = [1]
    count = 2
    print(line)
    for i in range(1,n):
        line.append(count)
        count += 1
        print(line)
        if len(line) == 9:
            line.append(0)
            print(line)
            count = 1
triangle(5)
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]

但是一个列表会像这样打印它。而且我很难使用 0 并让它重新开始倒数到 123 等。

【问题讨论】:

  • 对此有很多解决方案,包括使用列表。不如直接使用u''.join(line) 来完成你的清单?
  • 我还是不明白...如果我使用字符串,我将如何获得数字以及在哪里使用u' '.join(line)

标签: python numeric


【解决方案1】:

一种可能,可能是最简单的:

  1. 逐一打印数字并使用print <value>,(注意逗号)以避免在每个print 之后出现换行符。最后,不带参数的print 只会产生一个换行符。

    这样,您甚至不必建立序列。

    print是一个函数时,对应的语法是print(<value>,end='')print('')

  2. 要循环数字,请使用模运算 (%)

【讨论】:

  • 我应该在哪里使用print <value>,?我会做print(line,)吗?
  • 你没有指定你的 Python 版本,所以我给出了 Python 2(print 是默认的语句)和 3(print 是一个函数)的语法。
  • 我使用的是 Python 3。我将如何使用模运算来循环数字?通过说,for I in range(1,n): i % n?
  • 哎呀,抱歉,% 的正确词是 modulo(=除法后的余数),而不是 模数
  • 既然要上9再从0重新开始,那么除以多少后的余数你感兴趣?
【解决方案2】:

这是我的尝试

def triangle(n):    
    s = ""
    for i in xrange(0,n):
        s +=  "{}".format((i+1)%10)
        print s
triangle(15)

输出:

1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
12345678901
123456789012
1234567890123
12345678901234
123456789012345

【讨论】:

    【解决方案3】:

    几乎是单线:

    >>> import string
    >>> def number_triangle(n):
    ...   print u''.join(string.digits[(i+1) % 10] for i in range(n))
    ... 
    >>> for i in range(15):
    ...   number_triangle(i)
    ... 
    
    1
    12
    123
    1234
    12345
    123456
    1234567
    12345678
    123456789
    1234567890
    12345678901
    123456789012
    1234567890123
    12345678901234
    

    【讨论】:

    • 我喜欢这个答案,但我认为这一切都必须在一个功能之下。
    • 是的,我在重新阅读时注意到该函数应该执行循环,但是如果您愿意的话,将我留下的所有部分“作为练习”组合起来非常容易。
    【解决方案4】:

    虽然可以有更优雅的代码:

    def tri(n):
        start = 1
        while (n >= start):
            foo = ""
            for i in range(1, start+1):
                foo += str(i%10)
            print foo
            start += 1
    

    【讨论】:

    • “授人以鱼,养其一日;授人以渔,养其一生”。这显然是一个练习,仅仅给出一个答案不会教给他任何东西。
    • 这也不是最干净的解决方案。
    • 我说这是最干净的吗?
    • @ivan_pozdeev StackOverflow 是关于特定问题的离散答案。这不是 CodeAcademy。如果您真的想教某人,请与他们开始聊天。
    • 我试过这段代码,它打印出三角形,但数字一直在增加。它不会停在 0 并重复回到 1。
    猜你喜欢
    • 2019-11-18
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2021-08-05
    • 2023-02-24
    • 2017-09-09
    • 2016-01-04
    相关资源
    最近更新 更多