• 面试题-python3 按规律写出下一个数1, 11, 21, 1211, 111221


    python测开面试题

    观察下面数字的规律
    1
    11
    21
    1211
    111221

    第一项是数字 1
    描述前一项,这个数是 1 即 “ 1 个 1 ”,记作 “11”
    描述前一项,这个数是 11 即 “ 2 个 1 ” ,记作 “21”
    描述前一项,这个数是 21 即 “ 1 个 2 ,1 个 1 ” ,记作 “1211”
    描述前一项,这个数是 1211 即 “ 1个 1 , 1个 2 , 2 个 1 ” ,记作 “111221”

    用Python实现前N(N=10)个

    先得到一个数字

    以a=111221为例,得到下一个312211

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    # 描述一段数字
    a = '111221'
    # 先切分成连续的 ['111', '22', '1']
    b = []
    temp = ''
    for i in a:
        if len(temp)==0:
            temp += i
        else:
            if i == temp[-1]:
                temp += i
            else:
                b.append(temp)
                temp = i
    else:
        # for循环结束后执行这句,最后的temp需添加过去
        if len(temp):
            b.append(temp)
    print(b)     # 得到 ['111', '22', '1']
    # 字符串描述['111', '22', '1']
    str_a = ''
    for i in b:
        str_a += str(len(i))+i[0]
    print(str_a)  # 得到312211
    

    迭代器解决

    这题跟斐波那契数列有点像,每个数字都是在前面一个数字基础上生成的下一个数。
    python迭代器可以生成下一个数,参考前面的斐波那契数列https://www.cnblogs.com/yoyoketang/p/14459595.html

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    class NextNumbers:
    
        def __iter__(self):
            self.a = '1'
            self.count = 0
            return self
    
        def __next__(self):
            self.count += 1
            if self.count == 1:  # 第一次迭代
                return self.a
            b = []
            temp = ''
            for i in self.a:
                if len(temp)==0:
                    temp += i
                else:
                    if i == temp[-1]:
                        temp += i
                    else:
                        b.append(temp)
                        temp = i
            else:
                # for循环结束后执行这句,最后的temp需添加过去
                if len(temp):
                    b.append(temp)
            # print(b)     # 得到 ['111', '22', '1']
            # 字符串描述['111', '22', '1']
            str_a = ''
            for i in b:
                str_a += str(len(i))+i[0]
            self.a = str_a
            if self.count <= 10:
                return self.a
            else:
                raise StopIteration
    
    myclass = NextNumbers()
    myiter = iter(myclass)
    # for 遍历输出前10
    for i in myiter:
        print(i)
    

    运行结果:

    1
    11
    21
    1211
    111221
    312211
    13112221
    1113213211
    31131211131221
    13211311123113112211
    
  • 相关阅读:
    对Android开发者有益的40条优化建议
    git推送tag到远端服务器
    详细注释!二维码条码扫描源码,使用Zxing core2.3
    探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
    android的logcat详细用法!
    【Android】开源项目汇总-备用
    android 中theme.xml与style.xml的区别
    Android实现对HOME键的捕获和屏蔽
    java中newInstance()和new()
    java Stack
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14766629.html
Copyright © 2020-2023  润新知