鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 157

[复制链接]
发表于 2018-2-27 17:04:40 | 显示全部楼层
本帖最后由 graceasyi 于 2018-2-27 17:08 编辑

这个题目好,既不是太难,又能学到新知识。太棒了!

加了一个退出循环的语句~

  1. def fun():
  2.     n = 1
  3.     m = 1
  4.     while n:
  5.         a = 2 ** n
  6.         b = 3 ** m
  7.         if a < b:
  8.             yield a
  9.             n = n + 1
  10.         else:
  11.             yield b
  12.             m = m + 1


  13. for i in fun():
  14.     print(i, end=' ')
  15.     q = input()             # 这里加入一个输入等待,按一次回车显示一个
  16.     if q == 'quit':                # 输入quit退出循环
  17.         break
复制代码


结果:
2
3
4
8
9
16
27
32
64
81
128
243
256
512
729
1024
2048
2187
4096
6561
8192
16384 quit

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 17:57:21 | 显示全部楼层
def fun():
    count1 = 1
    count2 = 1
    while True:
        num1 =2**count1
        num2 =3**count2
        if num1 >num2 :
            count2 +=1
            yield num2
        else:
             count1 +=1
             yield num1


for i in fun():
    print(i)
    input('--->')

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 18:07:51 | 显示全部楼层
def fun():
    n1 = 1
    n2 = 1
    while True:
        if 2**n1 < 3**n2:
            yield 2**n1
            n1 += 1
        else:
            yield 3**n2
            n2 += 1

for i in fun():
    print(i)
    input()

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 22:17:30 | 显示全部楼层
def fun():
    m=1
    n=1
    while True:
        if 2**m<3**n:
            yield 2**m
            m=m+1
        else:
            yield 3**n
            n=n+1

for i in fun():
    print(i)
    input()

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 22:42:48 | 显示全部楼层
def fun():
    a = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
    ff = [3, 9, 27, 81, 243, 729,  2187]
    max = 0
    min = 100
    b = 0
    a.extend(ff)
    for x in range(len(a)-1):
        for y in range(len(a)- x - 1):
            if a[y] > a[y+1] :
                b = a[ y ]
                a[y]  = a[y + 1]
                a [y +1] = b
    for xx in a:
        c = input('请按回车键:')
        print(xx)
fun()

点评

需要生成器能够无限进行下去  发表于 2018-3-4 20:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 08:15:26 | 显示全部楼层

  1. ##  修改了一下。默认参数为无穷大,可无限取值。
  2. ##  如n为一具体数值,则可取有限数量的值,比如fun(10)。

  3. def fun(n = float('inf')):
  4.     n2 = 1
  5.     n3 = 1
  6.     i = 0
  7.     while i < n:
  8.         a = 2**n2
  9.         b = 3**n3
  10.         x = a if a < b else b
  11.         yield x
  12.         i += 1
  13.         if a < b:
  14.             n2 += 1
  15.         else:
  16.             n3 += 1
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 10:17:26 | 显示全部楼层
d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-28 10:41:50 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-28 15:39:59 | 显示全部楼层
本帖最后由 红门饕餮 于 2018-2-28 15:52 编辑

def fun():
    n = 1
    while n >= 1:
        yield 2 ** n
        yield 3 ** n
        n += 1
for i in fun():
    print(i, end = '')
    input()

点评

是按大小来的,不是交替来的  发表于 2018-3-4 20:01
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 22:49:39 | 显示全部楼层
本帖最后由 天圆突破 于 2018-2-28 22:57 编辑

写错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 10:48:42 | 显示全部楼层
def fun():
    a=2
    b=3
    while True:
        if a<b:
            yield a
            a*=2
        else:
            yield b
            b*=3
for i in fun():
    print(i)
    input()
        

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 11:00:36 | 显示全部楼层
没看懂什么意思,能举个例子吗

点评

可以参考大家的答案  发表于 2018-3-4 20:02
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-2 10:29:13 | 显示全部楼层
  1. n=2
  2. m=3
  3. def fun():
  4.     global n,m
  5.     while True:
  6.         if n<=m:
  7.             yield n
  8.             n = n * 2
  9.         else:
  10.             yield m
  11.             m=m*3

  12. for i in fun():
  13.     print(i)
  14.     input()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-2 17:08:18 | 显示全部楼层
  1. '''
  2. 2的n次方是2, 4, 8, 16, 32, 64, 128, 256, 512, 1024,  2048......
  3. 3的n次方是3, 9, 27, 81, 243, 729,  2187......
  4. 如果两个序列合并,并按由小到大排列则是
  5. 2, 3, 4, 8, 9, 16, 27, 32, 64, 81, 128, 243, 256, 512, 729, 1024, 2048, 2187......
  6. 现在要求编写一个函数fun(),以yield返回值,成为一个生成器
  7. '''
  8. def fun():
  9.     m=2
  10.     n=3
  11.     while True:
  12.         if m<n:
  13.             yield m
  14.             m=m*2
  15.         else:
  16.             yield n
  17.             n=n*3
  18. for i in fun():
  19.     print(i)
  20.     input()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-2 22:19:31 | 显示全部楼层
本帖最后由 天圆突破 于 2018-3-3 20:18 编辑
  1. def arrangement():
  2.     i = j = 1
  3.     lst = list()
  4.     while True:
  5.         y = 3**i
  6.         lst.append(y)
  7.         while 2**j <= y:
  8.             lst.insert(lst.index(y), 2**j)
  9.             j += 1
  10.         yield lst
  11.         i += 1

  12. def fun():
  13.     j = 0
  14.     for i in arrangement():
  15.         while j <= len(i)-1:
  16.             yield i[j]
  17.             j += 1

  18. if __name__ == '__main__':
  19.     for i in fun():
  20.         print(i)
  21.         input()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 15:12:21 | 显示全部楼层
  1. def fun():
  2.     a=b=1
  3.     while True:
  4.         #判断平方与立方的大小
  5.         if 2**a<3**b:   
  6.             yield 2**a
  7.             a +=1
  8.         else:
  9.             yield 3**b
  10.             b +=1
  11. for i in fun():
  12.     print(i)
  13.     if input()=="q":
  14.         break
复制代码

不知道是不是符合要求

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 符合要求

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 16:07:18 | 显示全部楼层
  1. def fun():
  2.     #这里因为不知道无穷大怎么表示,就取了100,结果是一样的
  3.     count = 0
  4.     i = 1
  5.     j = 1
  6.     while count<100:
  7.         x = 2**i
  8.         y = 3**j
  9.         if x < y:
  10.             yield x
  11.             i += 1
  12.         else:
  13.             yield y
  14.             j += 1
  15.         count +=1   
  16.     return fun()


  17. for i in fun():
  18.     print(i)
  19.     input()
复制代码


2

3

4

8

9

16

27

32

64

81

128

243

256

512

729

1024

2048

2187

点评

while count<100:改为while True: return不需要了  发表于 2018-3-4 20:07

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 19:30:36 | 显示全部楼层
  1. def fun():
  2.     n1 = 1
  3.     n2 = 2
  4.     while True:
  5.         square = 2 ** n1
  6.         cube = 3 ** n2
  7.         if square < cube:
  8.             yield square
  9.             n1 += 1
  10.         else:
  11.             yield cube
  12.             n2 += 1


  13. def main():
  14.     for i in fun():
  15.         print(i)
  16.         input()


  17. if __name__ == "__main__":
  18.     main()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 20:04:27 | 显示全部楼层
老哥   思考不出来了   咋看其他鱼油的解答啊!

点评

现在可以看了  发表于 2018-3-4 20:07
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 22:24:54 | 显示全部楼层
linglong974 发表于 2018-3-3 20:04
老哥   思考不出来了   咋看其他鱼油的解答啊!

好,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 01:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表