☰
Python入门Day2:掌握变量、数据类型、循环与函数等基础语法
2026/10/16 4:30:56 网站建设 项目流程

1. 内容整体设计与思路拆解

1.1 “day2”在一条学习路线里到底该怎么定位

如果你正在跟一套零基础的编程入门教程,大概率第一天干的事是这样的:装好环境、认识编辑器、敲出第一行print("hello world"),屏幕亮起那一下确实有点小激动。但到了第二天,很多人会突然觉得不对劲——知识点开始变碎、变多,昨天还觉得挺简单的东西,今天就堆了一摞名词:变量、类型、运算符、分支、循环……这个阶段其实是整个学习过程中弃坑率最高的地方。

为什么弃坑率高?因为第二天做的事情,本质上是在“铺地基”。地基这东西看不见摸不着,没有漂亮的输出,只有枯燥的定义和规则。但你想,后面所有的项目、脚本、爬虫、数据处理、甚至人工智能的代码,全部都是站在这些基础语法上搭起来的。我在带新人时常讲一句话:第一天决定你还想不想学,第二天决定你到底能不能学得下去。如果第二天的基础语法学得扎实,后面所有阶段都是“拼积木”;如果这块松了,每学一个新东西都会觉得哪里不对劲,回头补课比新学还痛苦。

day2 的内容选择其实是有讲究的。常见的教程通常会把变量、数据类型、运算符、条件判断、循环、函数定义这六块塞进第二课,不是说一天就能消化完,而是这一节的内容正好构成一个“最小可运行逻辑闭环”——你能定义数据、能比较数据、能根据条件做选择、能重复做事、能封装一段逻辑,然后从这段逻辑里得到新结果。有了这套闭环,你其实已经可以写出很多有实际意义的小工具了。

1.2 为什么选这些内容作为“最小闭环”

咱们拿做饭来类比。第一天相当于你进了厨房,认识炉灶、菜刀、锅碗瓢盆,然后烧开了一壶水。第二天则是开始学洗菜、切菜、配调料——你还做不出宴席,但你已经掌握了处理食材的最底层动作。这些动作是你后面做任何一道菜的基础。

具体到编程里,“食材”就是数据(数字、文字、真假值),“处理动作”就是运算符,“根据情况选择不同做法”是条件判断,“反复翻炒”是循环,“提前配好一种固定做法顺手复用”就是函数。这六块没有谁可以砍掉。你写任何一段像样的代码,哪怕是一个自动分类文件的小工具,也几乎逃不开这六种结构。所以我会把 day2 视为整个课程体系里最要紧的一节课,它不产出惊艳的界面,但决定了你接下来的学习曲线是陡峭还是平滑。

我见过不少朋友在第一天学完就急着想直接做项目,搜后台管理系统、爬虫框架,结果被里面成百上千行代码砸晕。问题就出在跳过基础语法。所以这里也给正在上课的同学提个醒:与其急着跳过基础去“实战”,不如先把 day2 里的每一条规则亲手敲三遍,敲到自己不用看课件也能写出来为止。这个阶段慢就是快。

2. 核心细节解析与实操要点

2.1 变量:名字是标签,不是盒子

变量这个概念看着简单,但初学者至少有一半的坑都出在理解偏差上。很多人会听到一个比喻:变量就像是一个盒子,把值放进去,再从里面取出来。这个说法其实会误导人。更准确的理解是:变量是一个贴在对象上的标签,它本身不“装”着数据,只是“指”向数据。

怎么理解这件事的差别?举个例子,写a = [1, 2, 3]之后,再写b = a,然后b.append(4),最后打印a,结果是[1, 2, 3, 4]。如果变量是“盒子”,你肯定觉得a和b是两个不同的盒子,改了b不该影响a。但因为它们都只是指向同一个对象的标签,所以改动是共享的。这种细节在 day2 阶段不会立刻造成大麻烦,但等到你写稍微复杂一点的代码时,就会以各种诡异 bug 的形式找回来。早理解早省事。

实操时,我给新人的建议是变量名一定不要偷懒。x、y、temp、data这种名字写的时候爽,但隔三天回头看,自己都不记得它代表啥。命名稍微带点语义,比如user_age、order_total、is_logged_in,一眼就知道这个变量是干嘛用的。代码是写给机器运行的,但更是写给未来那个还要改它的你——或者接手你工作的同事看的。

2.2 数据类型:先搞清楚“值”的脾气

每种编程语言都有自己的基础类型,以现在大多数教程首选的 Python 为例,day2 里最常出现的是整型、浮点型、字符串、布尔值,以及列表和字典这两种最常用的容器。每种类型都有自己的“脾气”,用对了顺手,用错了就报错。

先说数字。整型和浮点型本来都是数,但运算时经常会被混合类型坑到。比如在 Python 3 里7 / 2出来的是浮点数3.5,但7 // 2是整除的3。很多新手分不清什么时候该用斜杠什么时候该用双斜杠,情绪一乱就容易写错。再比如浮点数的精度问题:0.1 + 0.2在计算机里并不精确等于0.3,而是0.30000000000000004。这是二进制的天然限制,不是程序 bug,但如果你在拿它做金额计算,就得改用Decimal。这个点要等学到后面才展开,但至少在 day2 就得在心里留个种子。

字符串是初学者摸得最多的类型。最常犯的错误有三个:第一个是单双引号嵌套没配对,在不该结束的地方提前结束了字符串;第二个是忘记类型转换,拿字符串去和数字做运算或者比较,直接报错;第三个是中文和编码问题,源文件如果不小心用错了编码,字符串可能直接乱码。这三个问题我在后面“常见问题”一节里会细说。

布尔值看似最简单,只有True和False,但它和逻辑运算搭配起来很容易绕晕。尤其是and、or、not组合在一起的时候,一张条件表就能让人抓狂。我的建议是,初学者不要硬背真值表,而是把判断拆成“每个人都能读出来的中文句子”,比如age >= 18 and has_ticket,读成“年满十八岁并且有票”,就比纠结and和or的优先级好消化得多。

2.3 运算符:别让“优先级”偷偷改变你的结果

运算符这一小节,知识点多且琐碎。算术运算、比较运算、逻辑运算、赋值运算,每一样都要会。多数新手栽跟头的地方并不是某个运算符不会用,而是多个运算符写在同一行时,执行顺序和你想的不一样。

比如result = 3 + 4 * 2,如果没学过优先级,很容易算成 14,但语言里乘法先于加法执行,结果是 11。数学里“先乘除后加减”大家都懂,换到编程里就有人放飞自我。我的原则很简单:优先级记不清的时候,不要猜,用括号。加括号不是丢人的事,反而是好习惯。代码是给人读的,(3 + 4) * 2一眼就知道先算什么,对阅读者来说非常友好。

另一个容易踩的坑是和赋值相关的“复合赋值”。a += 1相当于a = a + 1,这个写法省事但新手容易看懵。尤其是写循环的时候,计数器位置写错,或者漏写了自增,循环就会变成死循环,终端里光标闪个不停,程序也杀不掉。凡是遇到这种情况,先停一下,打断重新检查循环条件,不要看着它转半天才反应过来。

2.4 条件与循环:控制流程是写代码的“骨架”

学完变量和类型,就要开始学习“控制执行顺序”。条件判断就是让程序“遇见岔路口会选路”,循环则是让程序“能够重复干同一件事”。这两样东西入门门槛不高,但组合起来能表达的逻辑就非常丰富了。

写if判断时,新手最典型的毛病是条件写得过于啰嗦。你想判断一个数是否在 0 到 100 之间,正确的写法是0 < x < 100,Python 里直接支持这种连续比较。但换成某些其他语言就可能要写成x > 0 && x < 100。不管哪种写法,思路都是一样的:把复杂条件拆成简单条件的组合,再逐条确认每个简单条件本身对不对。

循环里for和while怎么选,也是一个高频困惑。我的建议非常直接:如果你需要遍历一组已知的数据序列(列表、字符串、范围),优先用for;如果你不知道要循环多少次,只知道满足某个条件就继续,那就用while。入门阶段绝大多数场景用for就好,while更适合做“直到某个事件发生才停”的逻辑,但控制不好很容易变成死循环。

2.5 函数:把重复劳动封装起来

函数到了 day2 末尾才出现,但它是连接“基础语法”和“项目实战”的桥梁。函数的意义就一句话:把一段可能要重复用到的逻辑打包,起个名字,以后想用就调用这个名字。

讲述函数时,我会特别强调“参数”和“返回值”这两个概念。参数是进到函数里的“原料”,返回值是函数加工后递出来的“成品”。有些函数有参数没有返回值,比如纯打印日志的函数;有些函数有返回值不需要参数,比如返回当前时间;有些函数两者都有。理解这么一层数据流动关系,后面学模块、学面向对象都会轻松很多。

还有一个细节值得提:函数定义的顺序。很多新手习惯把函数调用写在函数定义之前,然后在某些语言里会报错。虽然 Python 解释器在运行时才会真正去执行调用,但养成“先定义后调用”的习惯可以帮助你少生不少气。

3. 实操过程与核心环节实现

3.1 搭建一个顺手的基础练习环境

day2 这种语法练习课,环境和第一天略有不同,更需要一个能快速试错的交互式环境。我个人很推荐的做法是:本地装好 Python 环境,打开终端直接敲python进入交互式解释器,每一行语法规则丢进去立刻看到结果。这比用一个巨大的 IDE 建个项目再跑要快得多,尤其适合碎片化验证变量、类型、运算符这类小知识。

等你已经理解了规则,想完整地跑一小段逻辑,再新建一个以.py结尾的文件来写正式脚本。文件组织建议按当天知识点建一个文件夹,比如day2_basic_syntax/,下面放01_variable.py、02_datatype.py,类似这样。每个文件只聚焦一个知识点。不要上来就追求一个大而全的脚本,那是练习结束后整合实验该做的事。

小提示:Windows 用户装好 Python 后,记得在安装时勾上“Add Python to PATH”。这个步骤如果漏掉,后面在命令行输入python会提示找不到命令,又得折腾环境变量,很打击新手积极性。

3.2 从零手写一段“家庭支出记账小脚本”

为了把 day2 的知识点串起来,我在带新人时经常给一个小练习:写一个简单到极致的支出记账脚本。它不需要任何外部库,不需要界面,只跑在终端里。看起来非常简单,但变量、类型、条件、循环、函数全都能练到。

完整代码如下,你可以直接跟着敲一遍:

# 功能:简单支出记账,记录每天的支出并计算总额 def get_amount(prompt): """ 从用户输入读取数字,直到读到一个合法的数字为止。 这是对之前学过的 while 循环的最佳练习。 """ while True: raw = input(prompt) try: amount = float(raw) if amount < 0: print("金额不能是负数,请重新输入。") continue return amount except ValueError: print("输入不是有效数字,请重新输入。") # 程序从这里正式开始 expenses = [] total = 0.0 print("简易记账本(输入 0 结束)") while True: expense = get_amount("请输入本次支出金额:") if expense == 0: break item = input("这笔支出去哪了?比如‘午餐’或‘地铁’:") expenses.append((item, expense)) total += expense print(f"已记录 {item}:{expense} 元,当前总计:{total} 元") print("\n每笔记录如下:") for item, amount in expenses: print(f"- {item}: {amount} 元") print(f"今日支出总额:{total} 元")

这段代码里,day2 的知识点几乎全出现了。变量有total、expenses、item;数据类型有浮点型、字符串、列表和元组互相嵌套;运算符有比较、加法、复合赋值;条件判断有if expense == 0;循环有while无限循环配合break退出、for遍历列表;函数有get_amount,并且它还有参数和返回值。建议你不要只是看,而是逐行亲手敲一遍。

3.3 一步步拆解这段脚本的执行流

先看get_amount函数内部。while True表示这个循环会一直转下去,唯一的出口是return amount。input(prompt)会读取用户输入,但读进来的一定是字符串,所以用float(raw)转成浮点数。敢写这个转换,是因为外面的try能接住“转换失败”的异常——这就是第一次接触异常处理,虽然 day2 不会系统讲异常,但这里可以先体验一把“出错时怎么优雅应对”。

except ValueError是干嘛用的?如果你输入的是abc,float会直接抛异常,而这里的处理方式是打印一句提示,然后继续循环,相当于“不认这笔输入,请重新来一次”。这种写法在实际工程里非常常见,叫做“输入校验”。我在 day2 阶段就引入它,目的不是让你现在就掌握异常机制,而是让你知道:程序报错是常态,错误本身可以被拦截和处理。

接下来看主体部分的记账循环。第一次while用来不断读取新支出,直到用户输入0》退出。每读一笔,就追加到expenses列表里。列表中的每一项是一个元组(item, amount)`,这种“把多条相关信息凑成一组”的用法,简单且顺手,为后面学字典打基础。

最后的for循环遍历列表,按格式打印出每一笔记录。for item, amount in expenses这种遍历方式有个专业名词叫“解包”,意思是把元组里的两个元素分别赋给两个变量。这是 Python 中非常优雅的写法,建议记住。

3.4 常见的变体练习:改造出你自己的版本

基础版敲通之后,不要就此打住。真正让知识变成能力的是“变着花样改需求”。下面几个变体练习,难度从易到难,你可以当作 day2 的自测题:

  • 加一个“按分类统计”的功能:在 input 时让用户只选 1 句话费、2 餐费、3 行,存储时用分类编号,最后在结果区按分类汇总。这能练到嵌套的if和字典的计数。

  • 把记录列表改成“最新记录显示在最上面”,也就是倒序输出。可以直接用切片[::-1],也可以重新写一个新的正序循环,体会两种写法的差异。

  • 把脚本包成一个函数run_expense_tracker(),然后在文件末尾调用它。这能帮你理解函数定义环节和模块设计的雏形。

千万不要急着追求复杂功能。day2 的意义不在功能,而在把语法用熟练。如果你能不看任何资料,从头默写出这个程序,并且知道每一行为什么要这样写,那这天的内容就算真正过关了。

4. 常见问题与排查技巧实录

4.1 缩进错误:初学者的“头号通缉犯”

如果你使用 Python,缩进不是格式问题,而是语法的一部分。这是很多第一次接触 Python 的新人最容易懵的点:明明代码内容看起来都对,为什么运行就报IndentationError?

原因很简单:Python 用缩进表示代码块的归属。一个if下面跟的内容必须保持相同的缩进级别,要么全部用四个空格,要么全部用 Tab,不能混着来。之所以规定这么严格,是为了倒逼你写出清晰美观的代码。实际上只要你敲的时候保持“同一层代码按一下 Tab”,很少会出问题。出错的大多是复制粘贴代码时,空格和 Tab 混在一起。

如果报了缩进错,最快的方法不是盯着代码找,而是先把出问题的那段内容全选,统一改成 Tab 或四个空格。建议在编辑器里把“显示空白字符”这个选项打开,能看到点和箭头,一眼就能分辨哪些地方混用了。养成良好的缩进习惯不会花你额外时间,但能帮你省下无数排查精力。

4.2TypeError: can only concatenate str (not "int") to str这类类型报错

这个报错翻译成白话就是:你把一个字符串和一个数字用字符串拼接的方式硬拼在一起了。初学者最容易撞上的场景是——我前两天就见过一个案例,想打印一句话“今天是第2天学编程”,于是写了print("今天第" + 2 + "天"),结果直接报错。

为什么报错?因为"今天第"是字符串,2是整数,两个类型不能直接用加号“加”到一起。解决方式就是类型转换:print("今天第" + str(2) + "天")。或者用更省事的 f-string,也就是在字符串前面加一个f,然后用大括号把变量包进去:print(f"今天第{2}天")。f-string 大大减少了拼接时出错的机会,我甚至建议新手从一开始就养成用 f-string 的习惯。

遇到类型相关报错时,先不要慌,报错信息里其实已经把出问题的文件和行号都标出来了。养成一个看报错日志的好习惯——从下往上找最末尾那一条“错误主因”,那才是真正需要关注的地方。

4.3 中文乱码:一个容易被忽略的“环境刺客”

如果你在 Windows 的默认命令行里运行包含中文的 Python 脚本,有可能会看到中文全变成乱码。这个问题的本质不是你的代码错了,而是终端使用的编码和 Python 输出的编码不一致。

解决方式有两个方向。第一个是改文件的编码声明:在文件最顶上加上一行# -*- coding: utf-8 -*-,虽然在现代 Python 3 里这个声明通常可有可无,但保留它一般不亏。第二个更彻底的方法是“换终端/配置环境”:Windows 里推荐在代码里给sys配置标准输出编码,或者把终端切到支持 UTF-8 的现代终端里运行。总之一句话,遇到中文乱码不要怀疑你语法哪里写错了,先想想是不是编码不匹配的问题。

4.4 死循环:如何在不杀掉终端的前提下快速定位

写while循环时,新手常遇到“程序一直刷屏”或者“光标一直闪,怎么也不结束”的情况。解决方案听上去很暴力但很有效:在终端里按Ctrl + C,它会抛出一个KeyboardInterrupt,直接把当前程序打断。这是最快速止损的方法,不必每次都把整个终端关掉重开。

死循环的根源几乎都是循环条件“永远为真”。排查思路就是顺着循环体内变量的变化找:循环体里有没有改变循环条件的语句?如果条件依赖的是某个变量的值,那这个变量在循环体里有没有被重新赋值?想清楚这两步,大多数死循环都迎刃而解。说实话,谁写代码没卡过死循环,卡过之后才更懂循环边界条件的意义。

4.5 常见问题速查表

下面这表是 day2 阶段我总结概率最高的几个报错和应对方法,可以直接当作参考卡片收藏:

报错/现象原因快速解决
IndentationError缩进不一致统一用 Tab 或四个空格,不要混用
TypeError: can only concatenate str...字符串和数字直接拼接用str()转换或改用 f-string
SyntaxError: invalid syntax多半是缺括号/引号检查上一行是否闭合了符号
中文输出乱码终端编码不匹配切换 UTF-8 终端或调整环境编码
程序狂刷屏不结束死循环按Ctrl + C中断,检查循环条件
ValueError: invalid literal for int()把非数字字符串转整型先校验输入内容,再用int()转换

4.6 一个更重要的习惯:学会“阅读”报错信息

上面列举了这么多问题,我最想强调的还是那件事:不要怕报错,更不要一出错就闷头百度。报错信息本身是最精确的第一线索。它包含了错误类型、具体行号和触发原因,很多问题你只要耐下心把最后几行读一遍,答案就已经出来了。

我给新人的建议是:每一次报错,强迫自己把报错内容完整读三遍。第一遍看是什么类型的错,第二遍看在哪一行,第三遍看那行代码里到底哪个值、哪个函数可疑。三遍下来,大概一半的报错自己就能明白。剩下的一半再去问搜索引擎或者问人,你的问题也会更有营养。这个习惯如果能养成,比多背几个语法点有用得多。

5. 从 day2 到后续学习的一点过渡心得

5.1 练到“不假思索”是基础语法阶段唯一的标准

基础语法不存在“知道就行”的说法。光能看懂别人写的代码不算会,得能自己在空文件里默写出完整的逻辑。默写这个动作特别能检验掌握程度:如果你写到一半突然卡住,不知道某个循环怎么写、某个函数怎么调,那个卡住的知识点就是你没掌握的地方,回去翻课件、敲几遍、再默写,直到顺畅为止。

我在实际带人时发现一个规律:前期语法阶段练习量如果足够,后面进入文件操作、网络请求、数据分析这些章节时,阻力会小很多;如果前面偷懒,到了后面每写一段代码都像蒙着眼走路。用一句老话说就是“基础不牢,地动山摇”。dat2 学得稳不稳,基本决定了你一个月后是在和项目较劲,还是在和早该解决的语法错误较劲。

5.2 我给“零基础跟课”的人留几个很具体的建议

第一个建议:每天只消化当天内容,不要一天猛学三天的量。很多同学第一天热情高涨,一口气把第二、三天的内容也看完了,结果到第三天回头做练习题发现全忘了。学习这件事,尤其是基础语法这种“肌肉记忆型”知识,更需要小份多次,反复巩固。不如每天学完当天内容后,把配套练习做两遍,第二天先花五分钟复习一下昨天的代码,再学新内容。

第二个建议:动手前先想清楚“我要写什么”。哪怕你只是在抄教材上的例子,也先别急着抄,扫一眼代码大概判断出这段是干嘛的,再逐行敲。带着这个“预测”去写代码,远比无意识复制粘贴印象深刻。

第三个建议:把不会的问题记录下来。建一个“错题本”文档,把每次报错和最终解决方式记进去。我自己的习惯是在每个知识点旁边留一行注释,记录“这里曾经犯过什么错”。这个习惯越到后面价值越大,因为人的记忆曲线很残酷,同一个坑你会反复踩。

5.3 最后分享一个我用的“三遍法”

很多朋友问我怎么练基础语法最有效,我总结下来就是一个“三遍法”,虽然土,但特别适合新手。

第一遍通读知识点的讲解,在交互式环境里顺着敲代码,跑出什么算什么,先混个脸熟。第二遍关掉教程,凭理解在空白文件里把同样的逻辑自己写出来,卡住的地方打开教程再看一眼再继续,这一遍是主动学习最核心的过程。第三遍隔一天再默写一遍,能默出来,这个知识点才算真正属于你了。

这个方法说起来简单,难在坚持。但凡是认真做的人,反馈都很好。我自己刚开始学的时候,一个for循环写了三遍才真正理解什么是“遍历”,后来这个三遍法就一直用到了现在。学习编程没有那么多玄妙,基础阶段拼的就是重复的次数和思考的质量。

如果前面的知识点消化得不错,接下来你可以试着给日后的“day3”留个准备:开始了解列表和字典的更多操作、函数的高级参数方式、以及文件读写的最基础用法。这些都是顺着 day2 内容的自然延伸。我个人的体会是,别急着赶进度,把今天这篇里所有代码亲手敲完,再带着疑问去学下一课,你会发现自己学得远比想象中扎实。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询