为什么你总是学不会Python,入门Python的4大陷阱

img
img

经常看到有人建议入门要亲手输入每段代码,大家一定要三思,这只能提升你键盘打字水平

有段时间我经常需要来回切换多种编程语言,但并不考验我的语法记忆水平,这就是代码段的好处

小伙伴:“那其他的语法规则呢,比如运算符优先级别这些,我总是记不住怎么办?”

其实我也从来没有去记忆啥运算符优先级别,因为在出现多种运算符时,我总是使用括号明确他们的优先级别:

小伙伴:“这样子看起来,好像很容易入门,if 和 for 语法真的这么容易学习?”

并不是,像 if 语法的学习重点不是怎么写,而是怎么构造 bool 值,这就需要你进一步了解基本的数据类型(str、int、bool这些)。

幸好这些知识点的数量非常少,对于入门来说也不需要深入了解每个类型的保存机制(比如需要多少个字节)

以上这些知识点可能只是一本入门书籍中的1到3个章节的内容

序列的处理非常重要

当你基本了解 if 和 for 的使用后,下一步就要了解序列的数据结构(列表、元组)。

此时,初学者会陷入另一个坑——列表有许多方法需要记忆!

同样地,我也不推荐入门者记忆这些方法,只需要记住最常用的1、2个操作即可。比如:

  1. 添加元素:append
  2. 移除元素:remove

同理,字符串也有许多处理方法,通常我们只需要学习少量几个方法即可

小伙伴:“?!,就这样子?”

事实上,后期你可能连上述2个操作都很少用上。因为在 Python 中更倾向于构造新的序列,而非对序列原地操作。

当你后期学会了推导式之后,你就会发现用得最多的语法就是 if 和 for

你可能疑惑,为什么序列的处理很重要?

不管你学习什么的编程语言,不管你是应用开发还是普通的办公自动化学习,真正复杂的逻辑大部分来自于序列的处理。

比如一堆文件、每个文件中又会有一堆的数据。

而简单的单个数据,往往操作也是非常直白简单。

字典要不要在这个阶段学习?我建议是可以尝试了解,如果发现自己不能理解,那就跳过。因为后期总会有他的应用场景,那时候结合场景学习会更加轻松

学习分解问题的思维

经过上面2个阶段的学习,你会发现自己充其量只能解决小学加减乘除的简单问题,稍微复杂一点的问题你就毫无头绪。

此时你就陷入了另一个陷阱——一边思考逻辑一边写代码

多数入门书籍都不会教你这一点,因为这不是 Python 的特性,但他极其重要。

编程的本质是把现实逻辑用代码表达出来

而现实中,我们要完成一件比较复杂的事情时,都是先考虑整体流程,划分出多个子流程,最后才针对每个子流程考虑细节

我的文章少不了案例。

考虑以下的现实场景:你希望从你家里书架上(有100多本)找出某作者的书。

你可能觉得这个事情非常简单,不就是从头开始,每本书都看看作者名字,符合就拿出来?

这个思考过程实际就是从整体到细节的过程:

  1. 首先,你会考虑从哪里开始找,总有个搜索方向。比如从书架左上角横向扫过每一行的书
  2. 其次,在没有开始找之前,你就决定找出一本书后,看封面的作者名字
  3. 最后,符合条件要拿出来,与原来的书区别开来

注意上述每一点的思考都是在你开始操作之前就决定的,这就是整体到细节的考虑。

不会随手拿起一本书,然后才想到底怎么找作者名字?找到又要不要拿出来?这是非常反人类直觉的做法。

而 Python 初学者却经常使用这种反人类直觉编程——写到哪,想到哪

现在换成 Python 问题。

一个文件夹下有许多文本文件,每个文件相当于一本书,里面有书名、作者名字等信息:

img
下面是一个反直觉的写法。本文最后会给出自定义函数的做法,你能明显感受到2种写法的思维区别。

第一步:怎么能保证取出每一个文件,没有遗漏也不会重复取出?

经过网上搜索"python 文件夹文件",可以找到多种方式,我就随手用其中一种:

import os

for file in os.listdir(r'目标文件夹路径'):
    # file 就是每个文件的路径
    pass

第二步:有一个文件路径,怎么读取里面的内容?

网上搜索"python 读取文件",找到:

with open('文件路径(记得带后缀)', 'r') as f:
    lines = f.readlines()
    # lines 是一个列表,每个元素就是文件中的一行内容

这一步其实是第一步里面的后续操作,于是:

import os

for file in os.listdir(r'目标文件夹路径'):
    # file 就是每个文件的路径
    with open(file, 'r') as f:
        lines = f.readlines()

第三步:文件中作者行内容是有"作者:"前缀,给你这一行,怎么提出里面的作者名字?

这是普通字符串操作:

'作者:小明'.split(':')[1]

这应该是入门必需学会的方法,当然你也可以网上搜索"python 字符串分割"

于是,现在代码成这样(顺手把书名也取出):

import os
for file in os.listdir(r'目标文件夹路径'):
    with open(file, 'r') as f:
        lines = f.readlines()
        
        # 第三步
        book = lines[0].split(':')[1]
        author = lines[1].split(':')[1]

第四步:判断书名是不是我们要找的,符合要取出来

这就用上 if 判断和基本的序列操作:

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值