陈斌老师《数据结构与算法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版课有感

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

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