☰
Python3基础语法入门:变量、类型、运算符与输入输出详解
2026/10/15 23:54:22 网站建设 项目流程

很多朋友学Python,第一行代码都是从print("Hello, World!")开始的。这个经典开场确实能让人快速获得成就感,但如果说这就是"基础语法"的全部,那后面写稍微复杂一点的项目时,十有八九会栽跟头。我当年入门就是东抄一段、西试一句,变量和类型这些最底层的东西糊里糊涂,等到自己要写一个几十行的脚本,各种TypeError、NameError劈头盖脸,排错排到怀疑人生。

所以这篇作为Python3 基础语法系列的第1篇章,我打算把地基一次性讲透。这一篇覆盖的内容包括:环境怎么装、代码怎么跑,以及最核心的变量与数据类型、运算符、输入输出,最后再用一个小程序串起来。适合刚接触编程、或者学了一段时间还觉得知识点零散的朋友参考。看完这篇,你能独立写出带交互的计算脚本,也为后续学习条件分支、循环和函数打下一个扎实的基础。

1. 先搞清楚Python3到底在学什么

在动手敲第一行代码之前,我建议先花几分钟理解 Python3 这个"解释型语言"的意思。很多新手忽略这一步,结果遇到各种诡异问题,其实都是因为没理解 Python 代码的执行方式。

1.1 解释器语言的执行逻辑

Python 代码由解释器一行一行地读取、翻译并立即执行,而不是像 C、C++ 那样先把整个源代码编译成可执行的机器码。打个比方:编译型语言像先把一整本书翻译成中文再出版,读者拿到的是成品;解释型语言则像现场翻译,你读一句,翻译跟着译一句。

这个差异直接带来了几个可感知的特点:

  • 开发调试快:改一行代码,重新运行就能看到效果,不需要漫长的编译等待。
  • 跨平台好:同一份.py文件,只要目标机器装了解释器,基本就能跑,不用为不同系统重新编译。
  • 运行效率相对低:因为是一边翻译一边执行,同样的计算任务,Python 通常比 C 或 Java 慢。但在日常脚本、数据处理、自动化测试场景下,这个损耗完全无感。

理解这一点之后,你就会明白为什么 Python 程序员常说"动态、解释型"这些词,也就能理解后面遇到的一些性能取舍。

1.2 为什么选Python3,而不是Python2或其它语言

这个问题几乎每个新手都会问。我的回答很直接:学 Python3,没有纠结版本的必要。Python2 官方早已停止维护更新,第三方库生态全面转向 Python3,现在你用旧书或旧教程里的 Python2 语法写代码,很多库装不上、跑不通,纯粹是给自己添堵。

Python3 相比 Python2,在语言层面做了几项关键改进,其中最影响日常开发的是:

  • print从语句变成了函数,必须写成print("内容")
  • 整数除法/永远返回浮点数,例如7 / 2结果是3.5,而在 Python2 里结果是3
  • 字符串默认使用 Unicode 编码,中文处理稳定得多

如今各种主流框架、数据分析和人工智能类库都只支持 Python3,"直接学3"就是最稳妥的选择。至于其它语言,并不是 Python 不好,而是不同工具解决不同问题。Python 的语法简洁、上手曲线平缓、内置功能丰富,作为第一门编程语言非常合适。等基础扎实了,再根据项目需要去学 Java、Go 或者前端技术,那时你已经理解了"编程思维",切换成本会低很多。

1.3 你必须提前知道的"缩进"规则

Python 有一件让新手又爱又恨的事:用缩进表示代码块。其它语言用大括号{}来划分范围,Python 直接看缩进层级。这逼着你的代码强制对齐,写出来的程序天然就清晰易读。

但这也是新手最容易翻车的地方。常见问题包括:

  • 空格和 Tab 混用,解释器直接报IndentationError
  • 该缩进的地方没缩进,或者多缩进了一格
  • 复制网上的代码时,格式被打乱导致报错

我的建议是:统一使用4个空格缩进,并且在代码编辑器里开启"空格代替Tab"的选项。不要觉得这个规则烦人,它能在你写复杂逻辑时强迫你理清结构,反而是 Python 的优点。

2. 环境搭建与第一次运行

很多人以为装 Python 环境很麻烦,其实它比想象中简单。真正麻烦的往往是后面安装第三方包时的网络问题,而这一步是我们下一篇再聊的内容,这里先把基础跑通。

2.1 各系统下的安装方式

Windows:去 Python 官方渠道下载安装包,安装时千万记得勾选"Add Python to PATH"这个选项。不勾的话,之后在命令行里输python会提示找不到命令,很多新手卡在这一步,以为是安装失败,其实只是没加环境变量。装完之后,打开命令行输python --version,能显示版本号就说明成功。

macOS:系统自带的 Python 版本通常比较旧,不建议直接使用,还是装一份新版更省心。安装方式和 Windows 类似,下载安装包执行即可。装完在终端输python3 --version验证。

Linux:多数发行版自带 Python,可能版本略旧,但学习基础语法完全够用。如果需要新版本,可以用系统自带的包管理工具安装,一般命令是sudo apt install python3这类。不同发行版命令略有差别,按自己系统的文档来即可。

安装完成之后,有的系统里命令是python,有的系统里是python3。这取决于 PATH 配置,不用太纠结,哪个能用就用哪个。

2.2 交互式解释器与脚本文件

Python 提供两种运行方式,用途完全不同。

第一种是交互式解释器。在终端里输python回车,就进入了一个>>>开头的环境。你敲一行代码,它立刻执行并返回结果。这特别适合快速验证想法、试几个函数、算个表达式。比如我记不住某个字符串方法的效果,就直接敲进去看输出,比翻文档快多了。

第二种是脚本文件运行。把代码写进一个以.py结尾的文件,然后终端执行python 文件名.py。这是真正开发项目时的主力方式。因为交互式环境里你写的每一行都即时执行,一旦代码变多,基本没法维护,也不利于复用。

学习阶段的建议是:验证想法用交互式,练习和作业用脚本文件。只混交互式环境会缺少"写完整程序"的感觉,而只写脚本又少了快速试错的机会,两者结合最舒服。

2.3 第一个Python3程序

老规矩,先来一个最经典的程序。新建一个文件,比如叫hello.py,写入:

print("Hello, Python3!")

在终端执行:

python3 hello.py

你会看到屏幕输出Hello, Python3!。这里多说一句,print()可以一次性输出多个值,用逗号分隔,默认会用空格把它们连接起来:

print("我的名字是", "小明", "今年", 18, "岁")

输出结果为:

我的名字是 小明 今年 18 岁

在 Windows 上写中文时,偶尔会遇到终端输出乱码,这是控制台编码的问题,不是 Python 语法错。Python3 的源码文件默认按 UTF-8 处理,一般不用管。如果真的遇到终端乱码,把系统代码页切到 UTF-8 通常能解决。

2.4 学习阶段值得养成的两个习惯

第一个习惯是别用系统自带的记事本写代码。记事本不带语法高亮、缩进提示,保存编码也可能出问题。我见过太多同学,代码明明没问题,结果因为记事本把文件存成了带 BOM 的编码,程序一运行就报错。随便换一个支持语法高亮的代码编辑器都能避免这类麻烦,学基础阶段用轻量级的就够了。

第二个习惯是看不懂报错的时候,先读最后一行。Python 的报错信息其实非常人性化,它会告诉你错误类型和出错的代码行。比如你写错变量名,会提示NameError: name 'xxx' is not defined。很多人一看到一大段英文就慌了,其实只有最后一行是核心,前面的是调用栈,可以先忽略。

3. 变量与数据类型:程序的基本组成单位

程序说白了就是"处理数据"。而数据在 Python 里以"对象"的形式存在,变量则是给对象贴的名字。理解这一点,后面学列表、字典时会顺畅得多。

3.1 变量是"标签"而不是"盒子"

很多入门教材把变量比喻成装数据的盒子,这个类比在有些语言里还行,但对 Python 不够准确。更准确的说法是:变量是贴在对象上的名字标签。

当你写:

a = 10

实际发生的事情是:Python 创建了一个值为10的整数对象,然后把标签a贴到了它身上。之后你写:

a = 20

Python 又创建了一个值为20的新对象,并把标签a从原来的10上撕下来,贴到了新对象上。原来的10如果没有其它引用,会被自动回收。

这个区别有什么实际影响?最大的影响在于:当你用a = b让两个变量指向同一个对象时,它们指向的是同一个东西,而不是复制了一份。这一点在学列表、字典的时候尤其重要,很多"改了 a 结果 b 也变了"的诡异 bug 就是因为没理解"标签"模型。现在基础阶段先留个印象,后面我会在专门讲列表的篇章里展开。

变量的命名也讲究规则:

  • 只能由字母、数字、下划线组成,不能以数字开头
  • 不能使用 Python 的关键字,比如if、while、class等
  • 建议用有含义的名字,比如user_name而不是a

我见过有人写a = "张三"、b = 25、c = 180,等过两天回看代码,完全不知道哪个是姓名、哪个是年龄、哪个是身高。命名清晰不是矫情,是给自己省时间。

3.2 四种最基本的数据类型

Python3 最常用的基础数据类型有这么几种:

类型名称示例说明
int整数100、-5、0没有小数点的数字
float浮点数3.14、1.5、-0.01带小数点的数字
str字符串"hello"、'你好'用引号包裹的文本
bool布尔True、False只有两个取值,表示真/假

想确认一个数据是什么类型,用内置函数type():

print(type(100)) # <class 'int'> print(type(3.14)) # <class 'float'> print(type("hello")) # <class 'str'> print(type(True)) # <class 'bool'>

字符串可以用单引号也可以用双引号,效果一样。唯一的注意点是:如果字符串内容里包含引号,就需要用另一种引号包起来或使用转义符号。比如"He said 'hello'"这样写就合法。多行字符串用三个引号"""或'''包住,还能保留换行格式。

布尔类型True和False首字母必须大写,写成true会直接报错。在后续学习条件判断时,布尔值是判断的核心。

3.3 类型转换:让数据在类型之间切换

实际开发中,数据类型之间的转换非常常见。Python 提供了几个内置转换函数:

int("123") # 123,把字符串转整数 float("3.14") # 3.14,把字符串转浮点数 str(123) # "123",把整数转字符串 bool(1) # True,非零数字转 True bool(0) # False,0 转 False

这里有几个特别常见的坑:

  • int("3.14")会报错,因为3.14这个小数字符串不能直接转整数,必须先float("3.14")得到3.14,再int(...)得到3
  • int("abc")会报ValueError,因为abc根本不是数字
  • 浮点数转整数时直接截断小数部分,不四舍五入。int(3.99)结果是3

理解这些转换规则,对后面处理用户输入非常关键。因为input()拿到的永远是一堆字符,想让它当数字用,就必须自己转换。

3.4 和类型相关的几个常见报错

新手最容易碰到的报错之一,是混用了不同类型的数据。比如:

"abc" + 1

这段代码会报TypeError: can only concatenate str (not "int") to str。意思是字符串和整数不能直接相加。这在逻辑上也说得通:"abc" + 1到底应该得到"abc1"还是4?Python 无法猜测你的意图,干脆报错。

另一个容易出错的地方是 Python3 的除法。在 Python3 里:

7 / 2 # 结果是 3.5,float 类型 7 // 2 # 结果是 3,整除,向下取整

很多从 Python2 转过来的人,第一次写7 / 2发现结果是3.5会吓一跳。这是 Python3 的正常行为,/永远返回浮点数,//才是整除。

字符串倒是有一个意料之外的操作——用*重复:

"ha" * 3 # 结果是 "hahaha"

这个特性在做文本装饰时很实用,比如打印一行分隔线。

4. 运算符:让数据开始干活

有了数据,接下来就是运算。Python 的运算符体系很全,这一篇先讲最常用的算术、比较、逻辑和赋值四类。

4.1 算术运算符

算术运算符就是你在数学课上学过的那套,加上 Python 自带的两个额外操作:

运算符说明示例结果
+加3 + 25
-减5 - 23
*乘3 * 412
/除,结果是浮点数7 / 23.5
//整除,向下取整7 // 23
%取余7 % 21
**幂运算2 ** 38

有两个细节值得单独说。第一,//是向下取整,不是简单地去掉小数部分。比如-7 // 2结果是-4,因为它向下靠近更小的整数。这一点在涉及负数运算时很容易出错,需要特别留意。第二,%取余在判断奇偶、周期性问题时非常有用,比如判断某个数是否能被另一个数整除,就看余数是否为0。

4.2 比较运算符

比较运算符的结果永远是布尔值True或False:

5 == 5 # True,判断相等 5 != 3 # True,判断不相等 5 > 3 # True 5 < 3 # False 5 >= 5 # True 5 <= 4 # False

这里有一个新手高频错误:把赋值=当成相等判断。在条件判断里写if 条件:时,有人会手滑写成if a = 5:,这在 Python 里属于语法错误,会直接报错。原因是=是赋值语句,"把 5 赋给 a"是动作,不是"判断 a 是否等于 5"。牢记:单等号是赋值,双等号才是判断。

比较运算符还能作用于字符串。Python 按字符的编码值逐位比较,比如"abc" < "abd"结果是True,因为前面两位相同,第三位c的编码值小于d。这个特性在给单词排序时有用,但基础阶段知道就行。

4.3 逻辑运算符:and / or / not

逻辑运算符用来连接多个条件,或者对条件取反:

True and True # True True and False # False False or True # True not True # False

实际使用中,条件常是比较表达式的结果,比如:

age = 25 salary = 8000 print(age > 18 and salary > 5000) # True print(age < 18 or salary > 5000) # True print(not age > 18) # False

这里要提一下短路逻辑:and和or在做判断时,如果左边的结果已经能决定整个表达式的值,右边就不会执行。比如False and 任何内容必然是False,Python 直接就返回False,根本不会去算右边。这在实际编程中可以用来做安全的取值判断。

4.4 赋值运算符与运算优先级

除了基础的单等号赋值,Python 还提供"先运算再赋值"的简写形式:

a = 10 a += 3 # 等价于 a = a + 3,结果是 13 a -= 2 # 等价于 a = a - 2,结果是 11 a *= 2 # 等价于 a = a * 2,结果是 22 a /= 2 # 等价于 a = a / 2,结果是 11.0,注意变成了 float

另外 Python 支持链式赋值:

x = y = z = 100

这一行把三个变量同时赋值为100,在初始化多个相同值时非常好用。

关于优先级,Python 有一套完整的规则,简单的记忆方法是:先算幂**,再算乘除取余* / // %,最后算加减+ -;比较运算符优先级低于算术运算符;逻辑运算符中not优先级最高,其次and,最后or。真到记不清的时候,最稳妥的做法是加括号,括号里的内容永远先算。写代码优先保证可读性,而不是秀优先级技巧。

5. 输入输出:程序和人对话的第一步

一个完全不和用户交互的程序,实用性会大打折扣。这一节讲清楚print()的输出细节和input()的输入逻辑,它们是你之后写所有交互工具的基础。

5.1 print()的几个实用细节

基础用法是直接打印一个或多个值:

print(1, 2, 3) # 输出:1 2 3 print("a", "b", "c") # 输出:a b c

多个值之间默认用空格隔开,如果你想用其它分隔符,可以指定sep参数:

print("2024", "01", "15", sep="-") # 输出:2024-01-15

end参数控制打印结束后的结尾字符,默认是换行符。改成空字符串可以让下一次打印接在同一行:

print("正在加载", end="") print("...完成") # 输出:正在加载...完成

这个技巧在写进度提示、构建文本时很实用。

5.2 input()的返回值永远是个字符串

input()函数用于接收用户输入,括号里可以放提示文字:

name = input("请输入你的名字:") print("你好,", name)

程序运行到input()时会停下来等待用户输入,用户敲完回车后,输入的内容以字符串形式保存到变量里。

这里是最多新手踩坑的地方。请看这个经典错误:

a = input("请输入第一个数字:") b = input("请输入第二个数字:") print(a + b)

如果用户输入5和3,程序输出的是53,而不是8。原因很简单:input()返回的都是字符串,"5" + "3"是字符串拼接,结果是"53"。要用数字求和,必须先转换:

a = int(input("请输入第一个数字:")) b = int(input("请输入第二个数字:")) print(a + b)

这再一次印证了第3章强调的类型转换的重要性。实际开发中,所有来自input()的数据都要先想清楚:我现在需要的是什么类型?是直接用字符串,还是转成整数、浮点数?想清楚再动手,能避免大量无谓报错。

5.3 格式化输出:f-string是最推荐的方式

很多时候,你需要把变量的值嵌到一段文本里。Python3.6 之后引入的f-string是当前最推荐的写法。

用 f-string,只需在字符串前面加一个f,然后用{}把变量名括起来:

name = "小明" age = 18 print(f"我的名字是{name},今年{age}岁。") # 输出:我的名字是小明,今年18岁。

更妙的是,{}里不仅能放变量名,还能放完整的表达式:

width = 10 height = 5 print(f"面积是{width * height}平方厘米。") # 输出:面积是50平方厘米。

还有两个老写法,虽然现在不推荐新代码使用,但你在阅读旧项目时可能会遇到。一种是format()方法:

"你好,{},你今年{}岁。".format(name, age)

另一种是%格式化,来自更古老的 C 语言风格:

"你好,%s,你今年%d岁。" % (name, age)

我的建议是:扎实掌握 f-string,看懂另外两种即可。f-string 直观、性能好,是 Python3 的主流新写法。

6. 把前面的内容串起来:一个完整的输入输出小案例

知识零散着学,很容易学了就忘。这一节我带你写一个能真正跑起来的小程序,把前面讲过的变量、类型转换、运算符、输入输出全部用上。它能计算体质指数(BMI),并根据数值给出提示。

6.1 完整代码与运行过程

# 从用户输入中读取身高(米)和体重(公斤) height = float(input("请输入身高(米):")) weight = float(input("请输入体重(公斤):")) # 计算 BMI bmi = weight / (height ** 2) # 输出计算结果 print("你的BMI是:", round(bmi, 2)) # 根据BMI数值给出提示 print("判断结果:", end="") if bmi < 18.5: print("偏轻") elif bmi < 24: print("正常") elif bmi < 28: print("偏重") else: print("肥胖")

运行效果示例:

请输入身高(米):1.75 请输入体重(公斤):65 你的BMI是: 21.22 判断结果:正常

这个程序里,input()拿到的字符串,被float()转成了浮点数用于计算;height ** 2是幂运算;bmi变量存储计算结果;round(bmi, 2)把结果保留两位小数;最后用if...elif...else根据数值范围给出判断。你看,前几章的每个知识点在这里都找到了自己的位置。

6.2 新手最常见的三个报错与排查思路

这个程序虽短,但已经够新手摔几跤了。我把最常见的三个报错列出来,你遇到时可以对照自查。

报错信息原因解决方式
ValueError: could not convert string to float: 'abc'用户输入了非数字内容,float()无法转换先校验输入,或捕获异常(后续章节会讲)
ZeroDivisionError: division by zero身高输入了0,分母为零在计算前判断身高是否大于 0
IndentationError: unexpected indent某一行的缩进多敲了空格,或空格 Tab 混用统一用4个空格缩进,删除多余缩进

遇到报错,先读最后一行,确认错误类型和位置,再去对应修改。这个过程本身就是最好的学习。

6.3 这段学习经历里我最有感触的三件事

第一件,别背代码。语法规则理解就行,真正需要记忆的是一些非常高频的写法,比如f字符串、input()转换。其它细节用到时查文档即可,编程的常态本来就是"查—写—改"循环。

第二件,多改代码,而不是重复抄写。把 BMI 程序里的elif bmi < 24改成elif bmi <= 24,看看结果有什么变化;把判断区间改一改,又会怎样。一次只改一行,观察输出变化,这种"做实验"的方式比抄十遍代码更有效。

第三件,环境报错不等于你写错。有时候程序本身没问题,是终端编码、编辑器设置或 PATH 问题。遇到这种情况先别慌,把关键信息复制到搜索引擎,绝大多数问题都能找到现成解法。你不是第一个踩坑的人,也绝不会是最后一个。

下一步还能学点什么

这一篇打下的基础,足够支持你继续探索条件判断if...elif...else的更多玩法、循环结构while和for、复合数据结构如列表和字典,以及最重要的函数封装。那些内容我在本系列后续篇章里都会展开讲。建议你先把我给的 BMI 例子动手敲一遍、改几轮,确保每一个知识点都能自己说出来、写出来,然后再进入第2篇章。

我自己的体会是,基础语法阶段最忌讳"眼高手低"——看起来好像都懂了,一动手全是错。所以无论这篇内容看起来多简单,都请务必亲手跑一遍。等你把变量、类型、运算符、输入输出这几块地板踩实了,后面学的每一个新知识都会变得又快又稳。

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

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

立即咨询