请问 Python 如何实现两个数字一行,三个数字一行交替输出? - V2EX
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
Laccuse
V2EX    Python

请问 Python 如何实现两个数字一行,三个数字一行交替输出?

  •  
  •   Laccuse 2018-08-04 23:19:53 +08:00 5634 次点击
    这是一个创建于 2708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天看到一题 java 的题目,# 输出 4 位数中能被 3 整除不能被 6 整除的数,两个数字一行,三个数字一行交替输出。

    想试试如何用 python 实现,鄙人 python 初学者,还望各位指点一下

    第 1 条附言    2018-08-05 23:10:27 +08:00
    谢谢大家,想不到第一次提问那么多大佬帮忙,问题已经顺利解决了,这帖子可以沉下去啦:)
    ClutchBear
        1
    ClutchBear  
       2018-08-05 01:17:26 +08:00
    ```python
    flag = 0
    for i in range(1002, 9999 + 1, 3):
    if i % 6 != 0:
    print(i, end=" ")
    flag += 1
    if flag == 2:
    print()
    if flag == 5:
    print()
    flag = 0
    ```
    ryd994
        2
    ryd994  
       2018-08-05 02:15:13 +08:00 via Android   1
    直接 5 个数一个单位循环不就行了
    而且这样的数出现的周期就是 6,去掉不输出的那个,刚好 5 个输出
    gaohongyuan
        3
    gaohongyuan  
       2018-08-05 02:57:37 +08:00
    @ClutchBear
    直接 range(1005, 10000, 6)就行吧,就不用判断是否被 6 整除了
    Laccuse
        4
    Laccuse  
    OP
       2018-08-05 10:24:10 +08:00
    @ClutchBear 我把你的代码跑了一下,不知道是不是我的格式问题,输出的只是那些数字,并没有按要求分行输出。看下去虽说能理解,但是本人对 flag 函数不是很熟悉,望指点。

    还有我的方法求满足要求的整数是:
    i_d = [i for i in range(1000, 10000) if i % 3 == 0 and i % 6 != 0]
    这个列表我想再遍历输出的话就有点不知道怎么下手了

    @ryd994 如果是五个数一个单位,那么是否会五个五个地输出呢,这似乎和题目不太符合啊- -。题目要求的是单数行输出两个数,双数行的输出三个数
    ryd994
        5
    ryd994  
       2018-08-05 10:48:02 +08:00 via Android
    你中间加一个换行不就行了?
    我说的是 5 个数一个循环单元
    yb3712590
        6
    yb3712590  
       2018-08-05 10:57:20 +08:00
    from itertools import zip_longest
    numbers = [str(i) for i in range(1002, 10000, 3) if i%3 ==0 and i%6 != 0]
    groups = ['%s %s%s%s %s %s'%(i[0], i[1],'\n' if i[2] else '', i[2], i[3], i[4]) for i in zip_longest(*[iter(numbers)]*5,fillvalue='')]
    print('\n'.join(groups))
    eastrd
        7
    eastrd  
       2018-08-05 11:33:41 +08:00 via Android
    先拿到所有数字,然后分配到两个线程中进行交叉输出+睡眠+循环。
    ClutchBear
        8
    ClutchBear  
       2018-08-05 16:18:39 +08:00
    SilverBullet
        9
    SilverBullet  
       2018-08-05 17:17:33 +08:00
    用 numpy 非常简单。
    ```python
    import numpy as np
    data = np.arange(1000,10000)
    data = data[(data%3 == 0) * (data%6 != 0)].reshape(-1, 5)
    [print('{} {}\n{} {} {}'.format(*row)) for row in data]
    ```
    THsoul
        10
    THsoul  
       2018-08-05 17:45:20 +08:00
    获取到 4 位数中能被 3 整除不能被 6 整除的数
    list = filter(None, [i if(i%3 is 0 and i%6 is not 0) else None for i in range(1000, 10000)])

    写一个返回指定长度并从元列表中剔除这些元素的方法
    def push_num(list, reqlen):
    count = 0
    req = []
    while count is not reqlen:
    req.append(list[0])
    del list[0]
    count += 1
    return req

    再写一个交替判断
    def list_slice(list):
    req = []
    req.append(push_num(list, 2))
    while True:
    if len(list) is 0:
    return req
    if len(req[-1]) is 3:
    req.append(push_num(list, 2))
    elif len(req[-1]) is 2:
    req.append(push_num(list, 3))

    最后 结合一下
    list_slice( filter(None, [i if(i%3 is 0 and i%6 is not 0) else None for i in range(1000, 10000)]) )
    wwg1994
        11
    wwg1994  
       2018-08-05 21:16:05 +08:00
    2 楼完美解决,doge
    twor
        12
    twor  
       2018-08-05 21:19:54 +08:00
    @Laccuse 1L 的就蛮好的,语法简单,代码也不长。
    flag 就是一个变量,用于输出 2、3 间隔的,非常简单,不要想复杂了
    Laccuse
        13
    Laccuse  
    OP
       2018-08-05 23:09:05 +08:00
    @ryd994 那我大概懂你的意思了,受你的启发我做了一个和你想的有点出入的,谢谢指教

    i_d = [i for i in range(1000, 10000) if i % 3 == 0 and i % 6 != 0]
    for j in range(len(i_d)):
    print(i_d[j], end=' ')
    if (j+4) % 5 == 0 or (j-4) % 5 == 0:
    print('')


    @yb3712590 厉害,只是我还没学到 itertool 里面的 zip_longest,有机会再继续研究吧,谢谢

    @eastrd 多线程现在还在摸索,看下来方法挺多的,也是思路一种,谢谢大佬指教

    @ClutchBear - -看了你的图是我傻逼了,真不知道当时是怎么复制进去修正格式的,谢谢,现在可以了


    @SilverBullet 百度了下似乎挺好用的一个包,我回头再研究下,谢谢


    @THsoul 辛苦了,写得很详细,只是现在对你的那个 None 不理解

    @twor 已经回头看了,可能是我对那些陌生的变量接触得比较少吧,我还傻乎乎地去查 flag 了,还以为是插旗了哈哈,谢谢指点

    @wwg1994 看来我理解还不够啊哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2632 人在线   最高记录 669       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:52 PVG 22:52 LAX 06:52 JFK 09:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86