V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
WKPlus
V2EX  ›  Python

单循环两行代码打印出三角形

  •  
  •   WKPlus · 2015-05-11 16:12:21 +08:00 · 4084 次点击
    这是一个创建于 3465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在hackerrank上面看到一个蛮好玩的题目: https://www.hackerrank.com/contests/pythonist/challenges/python-quest-1

    想了半天没有什么好办法,最后用了一个比较“猥琐”的解法:

    for i in range(1,input()): 
        print [1,22,333,4444,55555,666666,7777777,88888888,999999999][i-1]
    

    题目的限制比较多:
    1. 只能两行代码,且第一行已经写好了
    2. 只能用一个循环
    3. 不能用string相关的操作

    有人有其他有趣的解法么?

    24 条回复    2015-05-12 13:54:45 +08:00
    FastMem
        1
    FastMem  
       2015-05-11 16:30:13 +08:00
    研究了 半天也不知道PHP怎么两行。。
    pathletboy
        2
    pathletboy  
       2015-05-11 16:32:49 +08:00
    ```python
    for i in range(1,input()):
    print(("%d"%(i))*i)
    ```
    这个合格?
    phx13ye
        3
    phx13ye  
       2015-05-11 16:33:22 +08:00
    print i * str(i)
    为什么我零分啊
    hahastudio
        4
    hahastudio  
       2015-05-11 16:42:28 +08:00   ❤️ 3
    这个简单啊,这根本就不是编程题,这个是数学题,求数列通项
    print i * (10 ** i - 1) / 9

    我觉得我能解出来是因为我太年轻。。。
    wartime
        5
    wartime  
       2015-05-11 16:42:50 +08:00   ❤️ 2
    print reduce(lambda x, y: x * 10 + y, [i] * i)
    nlimpid
        6
    nlimpid  
       2015-05-11 16:45:38 +08:00
    print int('1'*i)*i
    imn1
        7
    imn1  
       2015-05-11 16:46:12 +08:00
    @FastMem
    SPL迭代器或者可以,不过我都忘得差不多了
    oott123
        8
    oott123  
       2015-05-11 16:47:04 +08:00   ❤️ 1
    print("▲")
    staticor
        9
    staticor  
       2015-05-11 16:55:05 +08:00
    同5楼, 楼主做几套公务员行测数量的几个数列题目就知道思路了
    batman2010
        10
    batman2010  
       2015-05-11 16:55:09 +08:00
    foreach my $i (1..9) { print $i x $i, "\n"; }
    mulog
        11
    mulog  
       2015-05-11 16:55:21 +08:00
    @pathletboy
    @phx13ye
    @nlimpid

    Note Using anything related to string will give a score of 0.
    dingyaguang117
        12
    dingyaguang117  
       2015-05-11 16:59:10 +08:00
    ```
    for i in xrange(1,10):
    print str(i)*i
    ```
    est
        13
    est  
       2015-05-11 17:11:21 +08:00
    @mulog 惨!
    aec4d
        14
    aec4d  
       2015-05-11 17:12:55 +08:00
    用近似欺骗的手段通过了Orz
    what = lambda x: 1 if x == 1 else pow(10, x-1) + what(x - 1);print(what(i)*i)
    YORYOR
        15
    YORYOR  
       2015-05-11 17:15:53 +08:00
    @oott123 给跪了
    feiyuanqiu
        16
    feiyuanqiu  
       2015-05-11 17:29:37 +08:00
    这个题有个问题,当 N >= 10 之后,应该怎么显示呢?
    是显示 10 个 10 ?(这样就不是三角形了,这一行有 20 个字符)
    或者其他样式显示?(这样整个规则跟前面的就不一致了)

    不考虑 N >= 10 的 php 代码:

    用字符串:
    for ($i=1; $i <= $_GET['N']; $i++)
    printf("%s<br>", str_repeat($i, $i));

    不用字符串:
    for ($i=1, $base = 1; $i <= $_GET['N']; $base+=pow(10, $i), $i++)
    printf("%s<br>", $i*$base);
    zonghua
        17
    zonghua  
       2015-05-11 17:30:31 +08:00 via iPhone
    我发现我智商不够
    fangjinmin
        18
    fangjinmin  
       2015-05-11 17:40:49 +08:00
    print str(i) * i
    zealot0630
        19
    zealot0630  
       2015-05-11 17:53:14 +08:00
    print i * sum([10**j for j in range(0, i)])

    不懂为什么fail
    shuson
        20
    shuson  
       2015-05-11 17:55:42 +08:00
    给我用单循环两行代码画个三角形
    我给你钱
    xjx0524
        21
    xjx0524  
       2015-05-11 18:01:27 +08:00
    @feiyuanqiu 1≤N≤9
    ykshen
        22
    ykshen  
       2015-05-12 02:18:31 +08:00
    for i in range(1,input()):
    print i * (10 ** i) / 9
    mianju
        23
    mianju  
       2015-05-12 08:39:29 +08:00
    @ykshen 感觉你这个是正解
    tsingyi
        24
    tsingyi  
       2015-05-12 13:54:45 +08:00
    @oott123 你赢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.