陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯

陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯题目思路程序如下总结题目谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中中央挖空,其余均由更小的地毯组成。现给定地毯大小(行数)与组成地毯的字符元素,请打印相应的地毯图形。注:空腔以半角空格表示;当给定字符元素长度不为1时空格数须与字符长度对应输入格式:输入为两行,分别为地毯大小正…

大家好,又见面了,我是你们的朋友全栈君。

陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯

题目

谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中中央挖空,其余均由更小的地毯组成。

现给定地毯大小(行数)与组成地毯的字符元素,请打印相应的地毯图形。

注:空腔以半角空格表示;当给定字符元素长度不为1时空格数须与字符长度对应

输入格式:

输入为两行,分别为地毯大小正整数N与组成元素字符串c

输入数据保证N为3的正整数幂

输出格式:

由N行长度为N*len©的字符串构成的谢尔宾斯基地毯

输入样例:

9

[]
在这里插入图片描述

思路

用递归方法
向最小格式迭代
每次按规律增加图形的长宽

程序如下

def carpet(N, char):
    len_c = len(char)
    if N == 3:
        return [char*3, char + ' '*len_c + char, char*3]		#最小格式时直接输出
    else:
        mylist = carpet(N/3, char)		#将图形存为一个列表
        for j in range(2):		#增加竖向宽度
            for i in range(int(N/3)):
                mylist.append(mylist[i])		
        for i in range(len(mylist)):		#增加横向宽度
            if i >= N/3 and i < N/3*2:
                mylist[i] = mylist[i] + ' '*len_c * int(N/3) + mylist[i]	#中间留白
            else:
                mylist[i] = mylist[i]*3
        return mylist

n = int(input())
c = input()
# n = 27
# c = '[]'
if n == 0:	# n=0直接输出
    print('')
else:
    ans = carpet(n, c)
    for i in ans:	#打印图形
        print(i)

总结

增加长宽时,要注意carpet(N, char)中char字符的宽度


学习陈斌老师的数据结构与算法Python版课有感

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158629.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决rsync 同步auth failed on module问题

    解决rsync 同步auth failed on module问题解决rsync同步authfailedonmodule问题

    2025年7月26日
    0
  • update Google play services_apfs for windows

    update Google play services_apfs for windows原文首发:http://mobileside.cn/post/2010/02/10/GoogleBuzzForWindowsPhone.aspx  昨天晚上,google推出了他们的Buzz产品。什么是Buzz,简单点说,他就是把微博服务和他的地图以及邮件结合到了一起,其实这是一个很典型的LBS。下载地址为:http://www.google.com/gmm/Google

    2022年8月31日
    0
  • react的context用法_api接口源码

    react的context用法_api接口源码React中Context的API

    2022年4月21日
    26
  • 改名了,一个新的开始

    怕什么真理无穷进一步有近一步的欢喜这个是我电脑桌面壁纸1又有一段时间没来这里了,看了上次发文的日期是2021年10月31日,已经快过去三个月了。上次发文还是2021现在已经到2022年了,…

    2022年3月1日
    40
  • pycharm python安装教程_python环境安装教程

    pycharm python安装教程_python环境安装教程首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后如下图,选择图中红色圈中区域进行下载。2、下载完成后如下图所示3、双击exe文件进行安装,如下图,并按照圈中区域进行设置,切记要勾选打钩的框,然后再点击Customizeinstallation进入到下一步:4、对于上图中,可以通过Browse…

    2022年8月25日
    4
  • AQS原理及用法_aqs是什么意思

    AQS原理及用法_aqs是什么意思AQS原理及用法1AQS简介AQS全称为AbstractQueuedSynchronizer,是Java中的一个抽象类。AQS是一个用于构建锁、同步器、协作工具类的工具类(框架)。有了AQS之后,更多的协作工具类都可以方便得被写出来。有了AQS,构建线程协作类就容易多了。控制并发流程的类,都需要线程等待和唤醒的功能,这是这些类的共同特点,因此可以抽象出一个基类,这就是AQS。AQS广泛用于控制并发流程的类,如下图:其中Sync是这些类中都有的内部类,其结构如下:

    2025年5月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号