python绘制蟒蛇绕圈圈_Python学习之循环--绕圈圈(蛇形盘)

效果图:

注意哦,右边多出来的一点不是程序有问题,是打印的时候我用的\t,但100,三个字符顶格的时候给顶出去的,我太懒了,不想再调输出格式了,就这么凑合看吧

实现代码:

sum = int(input("Please input a num:"))

end = [[0 for i in range(sum)] for i in range(sum)]

#初始化二维数组(列表)

num = list(range(1,sum*sum+1))

XH = sum / 2

#用于记录循环次数

CS = 0

#用于记录当前层数(从0开始)

for i in range(int(XH)):

b = 0

#用于卡住嵌套循环,让其每次循环不是全部n*n遍历而是1*1走直角

c = 0

#用于记录跳跃,防止在直角处进行两次赋值(因为我的竖排横排设置的长度是一样的,在直角处会叠加)

e = 0

#同变量c,是反直角使用的记录跳跃

d = 100

#同变量b,是用来反直角卡住嵌套循环的

for m in range(CS,sum-CS):

if (b != sum-1-CS):

for n in range(CS,sum-CS):

end[n][m] = num[0]

num.pop(0)

#为了便于赋值,全部统一采用pop弹出列表的形式进行取值,不容易出现索引混乱

b = n

#记录拐角的行数,然后为该行逐一赋值

c += 1

if(c == 1):continue

#如果是拐角处(我的判断是内层循环的第一次肯定是拐角)则跳过后面的语句进行下一次循环

end[b][m] = num[0]

num.pop(0)

for mm in reversed(list(range(CS+1,sum-CS))):

#为了便于反直角的遍历,我采用了reverse方法将列表内容进行反序,reverse是列表的方法,range没有,所以先转型

if (d != CS):

for nn in reversed(list(range(CS,sum-CS-1))):

end[nn][mm] = num[0]

num.pop(0)

d = nn

e += 1

if(e == 1):continue

end[d][mm] = num[0]

num.pop(0)

XH -= 1

CS += 1

if(sum % 2 != 0):

add = sum // 2

end[add][add] = num.pop()

#当输入为奇数时,最中间的是个单独的一个,没有直角,所以要单独赋值

for x in range(sum):

for y in range(sum):

print(end[x][y],‘\t‘,end = ‘‘)

print(‘\n‘)

总结:

代码不长,但解决问题时想了很久,尤其是在搞循环的时候,头疼!我觉得我的方法不太好,一开时有另一个思路,但觉得有点不能实现,于是就搞了这么一个有些牵强的法子,尤其是“直角”,“反直角”的处理,墨迹了好半天。

在做这个的时候遇到个好玩的事情,怎么初始化二维列表啊,因为Python也没有数组的概念,只有嵌套列表,但列表想要改值必须初始化好固定的大小的列表,否则很容易报索引超出列表范围的错。我开启的时候真不知道,只会挨个手敲,于是网上查了下,发现一个方法:end = [[0] * sum]*sum,这个写法有点让人信服哦,一个初始化为0的小列表重复n次,然后外面再把重复后得到的多个0合成的列表再重复n次得到一个含n个列表,每个列表含n个0。但是,问题来了:这个写法问题很大,第二层没什么问题,但第一层全是一个元素,举例构建2*2,得到end = [[0,0],[0,0]],当进行修改end[0][0] = 100,结果为:end = [[100,0][100,0]],原因是除了第一个元素列表,后面的元素列表是第一个的引用,即他们相当于是指针,都指向了第一个元素列表,当第一个进行修改时(改其他指针也一样),其他指针的值也会改变,因为本质上只有一个元素,正常的应该是新的指针指向新构建的元素列表,而不是直接指原来的。所以我又在同一个网页上往下看了看,发现发布者知道这个问题。。。然后我又换了新的写法:end = [[0 for i in range(6)] for i in range(6)] 这是最标准最正确的写法。内层列表,元素0,通过for循环迭代器,重复6次,得到6个0的列表,外层列表通过for循环迭代器循环6次,得到6个列表,最外层层一个列表括起来。重点在于,通过for循环迭代器方法,每次循环都是重新创建一个新的元素,而不是*那种的直接引用。

说实话,这一次也给我不少教训,就上面那个初始化列表,我看了上半部分就没再往下看,当我弄完程序测试的时候屡屡出问题,我一直觉得是我的循环有问题,真没往列表方向想,然后就是拆解,一步步来,拆到最后才发现,我改一个元素整个列表都跟着变,才意识到这个列表写法有问题,如果我能一次性读完了解清楚那篇文章写得内容,那么我这么长时间的排错是完全可以避免的,毕竟时间就是金钱,时间就是生命嘛!能省时间还是省时间来的好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存缓存MemoryCache

内存缓存MemoryCache实现了ICache接口,Redis同样实现了ICache接口,两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口,开发环境装配为MemoryCache,生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布…

quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码

一、QuickType 工具功能简介QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script,C,,Java,C#,Go 等)类型声明代码的工具。例如我们在写接口调用处理收到响应数据的逻辑时一般分为如下两步: 1.根据接口返回…

endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...

最近这几个月,XLOOKUP震惊了Excel界,传言三头六臂无所不能,一个人把LOOKUP全家兄弟姐妹的活都给抢了。最开始我是不以为意的,但是相关的信息越来越多,我终于忍不住,今天去买了一套office365,发现…

1个月教你学会用Python实现机器学习

什么是机器学习?在最简单的层面上,机器学习只是优化数学方程式的过程。有几种不同的机器学习,都有不同的目的。机器学习中最流行的两种形式是监督学习和无监督的学习。 我们将在下面介绍他们的工作原理:. 监督学习:监督…

ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试

点击上方蓝字关注“汪宇杰博客”导语ASP.NET Core 从 2.2 版本起,在 IIS 下可以使用 InProcess 模式提高性能,国外大神 Rick Strahl 对此有一片详细的文章。3年过去了,现在 ASP.NET Core 已经到了 5.0 版本,不同服务器之间的性能有…

sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句

MYSQL本资料为产品岗位作为日常工作参考,语言口语化At 2019/4/26 By David.Yang如何使用限定条件来进行数据过滤?在前问当中,我们已经学会到了SELECT查询,在过程当中多次接触了WHERE这个关键词,打过预防针应该知道他就…

gesturedetector.java_android使用gesturedetector手势识别示例分享

public class MyGestureLintener extends SimpleOnGestureListener {private Context context;public MyGestureLintener(Context context) {super();this.context context;}// 单击,触摸屏按下时立刻触发/*Overridepublic boolean onDown(MotionEvent e) {// TODO…

SQL SERVER 2005 同步复制技术

以下实现复制步骤(以快照复制为例)运行平台SQL SERVER 2005 一、准备工作:1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。 2.在SQL SERVER…

【分享】C# 字节帮助类 ByteHelper

【分享】C# 字节帮助类 ByteHelper独立观察员 2021 年 2 月 3 日本文分享一个 C# 的字节(Byte)帮助类(ByteHelper),主要是一些字节、字节数组、十六进制、十六进制字符串等之间的转换操作,适用场景包括但不…

win10必须禁用的服务_【亲测】Win10系统如何彻底禁止自动更新 亲测有效的Win10关闭自动更新方法...

昨天有人称Win10系统更新依然无法彻底关闭,今天再来补充一下,肯定可以!不少用户反映自己的Win10系统更新无法彻底关闭,网上提供的关闭Win10更新的教程,关闭之后还是会自动更新Win10系统,而今天装机之家分享…

python怎么读数据库的数据_python从数据库读取出来的字典怎么更加方便的插入数据库...

其他的SQL不清楚, pymysql是没有类似函数的。说到框架,python常用的几个ORM, 我印象中也没有提供类似写法的。既然没人写,而你又在php里觉得这么用趁手,不如自己按php的思路实现一个。我自己写了个database类和一些工具函数, 你说的逻辑在我这…

国庆中秋活动——超强AR/3D地球仪!带你领略世界风光!我们未必能环游世界,但都该有个地球仪

通知!通知!通知!!! 玩酷屋十一黄金优惠限时限量秒杀活动,能抢到算你厉害: 1、活动期间 2017/10/03 22:30 ——2017/10/06 22:30 2、【北斗AR地球仪】原价 299元,秒杀活动价 269元…

flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含

宏的概念类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。简单定…

PING 命令测试

使用 Ping 测试连接 Ping 命令有助于验证 IP 级的连通性。发现和解决问题时,可以使用 Ping 向目标主机名或 IP 地址发送 ICMP 回应请求。需要验证主机能否连接到 TCP/IP 网络和网络资源时,请使用 Ping。也可以使用 Ping 隔离网络硬件问题和不兼容配置。 …

如何在 ASP.Net Core 中使用 MiniProfiler

web应用程序的性能相信是大家普遍关心的一个问题,也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈,MiniProfiler 就是这个领域中的一款产品,它是一款简单的,功能强大的web应用分析工具,MiniProfile…

java 计时_Breitling(百年灵)世界时间终极计时腕表

所有热爱旅行的冒险家可以尽情期待,一款适合所有手腕的全新尺寸“旅行计时腕表”将在今年巴塞尔表展上华彩亮相。百年灵世界时间终极计时腕表(Chronomat 44 GMT),适合腕间的完美尺寸,便捷的三时区时间显示,超凡的百年灵自产机芯&a…

python时钟罗盘酷炫代码_抖音上的时钟屏保,被我改造完用来表白

作者:爱编程的小和尚原文链接:https://blog.csdn.net/Newbie___/article/details/105378852抖音上很火的时钟屏保,被我改造完后用来准备准备准备表白,谁说程序员不浪漫?!不知道一直关注小编我的小伙伴们之前…

大数据|意不意外?今年卖得最好的月饼是这个馅的……

中秋节,你家的月饼都吃完了吗? 淘宝、天猫、京东、苏宁易购等各大电商平台近日相继发布“月饼大数据”。透过这些大数据,我们来看看今年的“月饼消费”有哪些新趋势? 五仁稳居销量“老大哥” 五仁桂花、五仁肉松、五仁牛肉、五仁…

使用Silverlight2的WebClient下载远程图片

在Silverlight 2之前有一个Downloader对象,开发者一般使用Downloader下载图片和文体文件,这个对象在Silverlight 2中作为了一个特性被集成到WebClient类之中,你可以直接使用WebClient的OpenReadAsync方法加载远程图片的URI,然后使…

java os库_java-Mac OS X上的JNotify?

我想尝试JNotify,该插件库用于监视文件系统的更改,但无法弄清楚如何对其进行配置. JNotify的网页上说:“ java.library.path应该指向jnotify附带的本机库的位置(dll,dylib等)”.我是Mac OS X的新手,并不真正知道该怎么做.我正在使用NetBeans,希望有一种简单的方法可…