每天开心一点

Python:每日一题 66

2017-11-27 13:56:00    六月    573    来源: http://bbs.fishc.com/thread-88928-1-1.html

本题来自群友, 顺便宣传下群号:528770819,由风介大佬带领茫茫多的python区版主的官方群哦。



题目如图片。什么意思呢?

当输入1的时候,就返回1
输入2的时候呢,就要根据前面一个了,   前面是1,  那么我们就读作   1个1,   返回值就是11
输入3的时候呢,前面是11,  那么我们就读作   2个1,   返回值就是21
输入4的时候呢,前面是21,  那么我们就读作   1个2,1个1,   返回值就是1211
输入5的时候呢,前面是1211,  那么我们就读作   1个1,1个2,2个1   返回值就是111211

好了,说完了,可以愉快的开始了!


其实我的答案跟jerry的基本是差不多的,只不过我用的是类对象。因为我刚开始写的时候,是想按照第二种写法,调戏一下群友,让他要第几个就打多少个括号的。
  1. class Foo:
  2.     def __init__(self, t):
  3.         self.n = '1'
  4.         for i in range(t - 1):
  5.             self.n = self.__call__()

  6.     def __call__(self):
  7.         return ''.join([''.join([str(len(list(v))), str(i)]) for i, v in groupby(self.n)])


  8. print(Foo(10).n)
复制代码

调戏用的:
  1. class Foo:
  2.     def __init__(self, n):
  3.         self.n = n

  4.     def __call__(self):
  5.         return Foo(''.join([''.join([str(len(list(v))), str(i)]) for i, v in groupby(self.n)]))


  6. print(Foo('1')()()()().n)