编程思想第一课:编程,就是把生活中的东西在程序里面重建,复制一份。题目中提到的每个事物,题目中提到的每个动作,在程序里都是什么?必须建立这个对应表

本文主要是介绍编程思想第一课:编程,就是把生活中的东西在程序里面重建,复制一份。题目中提到的每个事物,题目中提到的每个动作,在程序里都是什么?必须建立这个对应表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先按照需求描述,原原本本的做,做出来了,再想优化。这是特别重要的!!

做出来是否优化,是六十分,七十分,八十分,九十分的区别,做不出来是零分!!


从98-3到98-4的过程中,我经历过一次思辨,以下就是这次对话的过程,我把对话记录下来,看看自己有多么的愚蠢:对自己逻辑上的bug毫无察觉并且一直坚持……

老师:你想清楚,什么代表你的圈里有一个人,就知道怎么出列了

我: 出圈可以用remove函数或者pop函数,list.remove(obj)  ,list.pop([index=-1])

老师:对,希望你真想明白了这个事情

我:可以用元素值代表、也可以用位置代表

老师:对

我:这个是别人写的方法

 老师:我还以为你知道 取模 了

我:我把报到3的数出列,但是后面的数数在数列中的位置就会改变,我就不知道怎么做了,我一直想着的是123123123,没想到取模

老师:出列不出列,和你数数有什么关系   你脑子里面还是没有把程序里的对象和现实中的事物对上号

我:你讲的太深奥了……

老师:编程,就是把生活中的东西在程序里面重建,复制一份。所以,题目中的每件事物,每个动作,在程序里都是什么?你必须建立这个对应表。

老师:你可以试试列出这张表,首先是题目中提到的每个事物,然后是题目中提到的每个动作

我:题目:有 10个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出 圈子,问最后留下的是原来第几号的那位。

我:1、10个人的号,用列表中的元素值表示
       2、报数,报的数字用变量count记录
       3、报到3的人,这个人对应的count应该是3,或者是count是3的倍数

老师:差一个,每个人怎么表示

我:每个人,就用他们顺序排号拿到的那个编号表示

老师:不对

我:那我就不懂了

老师:编号是编号,人是人,人有编号,但编号不是人

我:我一直以为编号就是人

我:list[index]  用这个表示? 每个人可以用元素值代表、也可以用位置代表

老师:人,是list里的一个元素,这个人的编号,是这个元素里的值

我:哦哦,元素跟元素值不是一码事,我混为一谈了

老师:这个事情,你必须想明白,这个是编程思想,编程思想比Python有价值多了

我:之前我做过一道题,测量收缩压和舒张压的,做数据记录就是用大列表里面嵌套小列表,大列表里的每一个元素就代表一次测量,一次测量的值就是小列表里的值。但是,好像在写代码的时候,感觉不出来有什么特别大的区别

老师:简单的程序看不出来,复杂的系统,区别可大了,就说这个题目吧

我:我写的程序都很简单,你问我之前,我就觉得他们是一样的,你一细问我,又感觉有点不一样

老师:这个题目里面,如果你很清楚的知道列表里的元素。每个元素代表一个人,那这题就很好做。如果你不能建立这种关系,那么,让一个人出列这件事情你就不知道应该怎么做

我:我不是很能理解这段话,我之前把编号和人混为一谈的时候,我还是可以用pop或remove让这个人出列啊

老师:但你不知道出列以后怎么办

我:对啊,我就是不知道出列以后怎么办

老师:题目里面出列以后怎么办的?

我:应该是继续往下报数

老师:对呀,你也什么不知道怎么做了呢?

我:是啊

老师:报数对应哪个程序动作呀

我:循环+count记录

老师:对呀,你pop之后,为什么不继续报数呢?

我:我怎么定位到pop之后的下一个人是哪个?他的位置变了,我又不知道他的元素值

老师:在出列之前,你怎么知道下一个位置是谁的呢?

我:在出列之前,每个人在圈子里的位置是固定的

老师:在出列之前,你怎么知道下一个位置是谁的呢?回答问题

我:用列表的索引来确定

老师:用列表的索引来确定什么?

我:用列表的索引来确定下一个报数的是谁

老师:如何用索引确定下一个报数的人是谁?在出列之前,你如何用索引确定下一个报数的人是谁?

我:

 老师:如果这个问题你回答不上来,你不仅不会做出列以后的,出列之前的,你也不懂呀,你说中文

我:用while循环和index += 1来确定下一个报数的人是谁

老师:那这件事在出列以后发生了什么样的变化呢?

我:在出列以后,用while循环和index += 1无法准确把出列人的下一个人定位为下一个报数的人

老师:为什么?

我:因为,在出列前,每个人在list里的索引是固定的,index += 1可以逐一取到每个人;在出列后,出列人之后的人,在list里的索引都发生了变化,index += 1可能会取到出列人之后的第二个人,而跳过了出列人的下一个人。

老师:哦……你的意思是出列的人,在报数的时候还是要报数的?

我:他报数的时候,报数之前和报数之后,他的索引不要改变

老师:索引值 对应 题目里的什么?

我:好像不对应什么诶

老师:那索引值为什么在程序中不能改变呢?

我:这大概就是我的逻辑上的bug

这篇关于编程思想第一课:编程,就是把生活中的东西在程序里面重建,复制一份。题目中提到的每个事物,题目中提到的每个动作,在程序里都是什么?必须建立这个对应表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/248129

相关文章

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor