新闻详情

新闻详情

首页 / 资讯中心 / 详情

【Python】基础语法(1):常量、变量、类型、输入输出与运算符

发布时间:2026/10/1 7:58:41来源:尧图网络
【Python】基础语法(1):常量、变量、类型、输入输出与运算符
星光编译者· 个人主页 学习专栏《C/C 成长笔记》·《Linux 实践手册》·《数据结构与算法》 向云端飞扬编译属于自己的代码星河。☕ 写在开篇你好这里是星光编译者。这里记录我在C/C、Linux、数据结构与算法学习中遇到的真实问题、亲手验证过的代码以及那些容易被忽略的实现细节。比起简单罗列结论我更愿意从问题出发把一个知识点的来由讲清楚把“为什么会这样”和“应该怎样解决”说明白让每一次踩坑都沉淀成可以复用的经验。如果这篇记录能帮你少绕一点路或让某个模糊的地方忽然变得清晰那么这次分享便有了意义。愿我们在一次次阅读、编译与调试中稳步向前慢慢搭起属于自己的技术世界。本文定位面向 Python 初学者从“把 Python 当计算器”开始建立表达式、变量、数据类型、控制台交互与运算符的完整认知。学习目标能读懂并写出基本表达式理解变量绑定和动态类型会使用input()、print()与 f-string掌握算术、关系、逻辑和赋值运算符能避开浮点数精度、字符串拼接与短路求值中的常见坑。阅读说明本文根据课程 PDF《2.基础语法(1)》整理并按现代 Python 3 实践补充snake_case、math.isclose()、异常处理与 docstring 的准确语义。文章目录一、从计算器开始常量、运算符与表达式二、变量的本质不只是“存数据的盒子”三、基本类型与动态类型四、注释与文档字符串五、控制台输入输出六、算术运算符七、关系运算符与浮点数比较八、逻辑运算符与短路求值九、赋值、拆包、复合赋值与交换十、综合实战一个更稳健的成绩计算器十一、常见误区与自测练习总结一、从计算器开始常量、运算符与表达式Python 可以直接完成算术计算print(12-3)print(12*3)print((12)*3)print(12/3)这四行代码虽然简单却已经包含三个基本概念1、2、3是直接写在代码里的字面值、-、*、/是运算符字面值与运算符按规则组合成表达式求值后产生一个结果。1.1 优先级与括号Python 的基本算术优先级与数学习惯一致先乘除后加减括号最先。因此12*3# 7(12)*3# 9当表达式稍微复杂时即使默认优先级恰好符合意图也可以用括号强化可读性。不要把代码写成一场“运算符优先级背诵比赛”。1.2/不会截断小数在 Python 3 中/执行真除法print(2/3)# 0.6666666666666666print(4/2)# 2.0即使两边都是整数/的结果也是float。如果需要地板除应使用//但它对负数的行为与“直接去掉小数”不同后文会专门说明。1.3 用表达式计算平均数average(67.589.012.932.2)/4print(average)这里的右侧是表达式左侧的average则把结果保留了下来。一旦计算需要多个中间步骤变量就开始显示价值。二、变量的本质不只是“存数据的盒子”初学时常把变量比喻成“存放数据的盒子”。这个比喻有助于入门但对 Python 而言更准确的理解是变量是一个名字赋值会让这个名字与某个对象建立绑定。score89.5scoreA第一行让score绑定到一个float对象第二行又让它改为绑定一个str对象。不是“原来的浮点数盒子被改造成了字符串盒子”而是名字的指向发生了变化。2.1 变量的定义、读取与修改count10# 首次绑定print(count)# 读取count20# 重新绑定print(count)Python 不需要在变量名前写int、float之类的类型声明。变量必须先赋值再使用# print(total) # NameError: name total is not defined2.2 变量名的硬性规则合法变量名需要满足由字母、数字和下划线组成不能以数字开头不能与 Python 关键字重复区分大小写score与Score是两个名字。user_nameAda# 合法score295# 合法_cache{}# 合法# 2score 95 # 非法数字开头# class A # 非法class 是关键字可以用标准库查看关键字importkeywordprint(keyword.kwlist)2.3 软性规范优先使用snake_case变量名要表达用途不要满篇都是a、b、x、y。现代 Python 代码通常遵循 PEP 8变量和函数名推荐使用小写加下划线total_count100person_infostudentaverage_score86.5totalCount这种驼峰写法并非语法错误但它不是 Python 变量名的主流风格。三、基本类型与动态类型类型并不是为了给知识点分类而硬造出来的名词。它至少回答两个问题这个对象如何在计算机中表示可以对它执行哪些操作3.1int整数count42print(type(count))# class intPython 的int不固定为 32 位或 64 位整数数值可在内存和实现允许的范围内继续增大huge_number10**100print(huge_number)“任意精度”不等于物理世界中的“无限”实际能表示多大仍受内存和运行环境限制。3.2float浮点数temperature36.5print(type(temperature))# class floatPython 内置的float通常使用 IEEE 754 双精度表示。它能表示很大的范围但并不能精确表示所有十进制小数。3.3str字符串languagePythonmessagehelloprint(len(language))# 6print(message world)# hello world单引号与双引号创建的都是strPython 没有独立的“单字符类型”A仍然是长度为 1 的字符串。print(type(A))# class str字符串可以与字符串拼接却不能直接与整数相加age18print(age str(age))# 可以但更推荐 f-stringprint(fage {age})# print(age age) # TypeError3.4bool布尔值is_readyTrueis_finishedFalseTrue和False的首字母必须大写。从类型关系上说bool是int的子类所以print(True1)# 2print(False1)# 1这个行为在计数场景中偶尔有用但不要为了“省一行代码”而让业务含义变得难懂。3.5 动态类型是一把双刃剑value10print(type(value))# intvaluetenprint(type(value))# str好处是代码简洁、函数容易复用代价是错误可能到运行时才出现。大型项目中可以通过清晰命名、单元测试、类型标注和静态检查降低沟通成本defcalculate_average(total:float,count:int)-float:returntotal/count类型标注主要服务于阅读与工具检查Python 默认不会因为标注而自动在运行时强制类型。四、注释与文档字符串代码首先要能被人读懂然后才是让计算机执行。注释的价值不在于“多”而在于它能否解释代码本身无法直接表达的意图、边界与取舍。4.1 单行注释#之后到行尾的内容是注释# 样本方差的分母使用 n - 1variancesquared_error_sum/(sample_count-1)上面的注释说明了“为什么是n - 1”比“计算方差”更有信息量。4.2 docstring 不只是多行注释三引号可以创建多行字符串。当它作为模块、函数、类或方法的第一条语句时会成为文档字符串defaverage(a:float,b:float)-float:返回两个数的算术平均值。return(ab)/2print(average.__doc__)它是一个真实的字符串对象可被help()、IDE 和文档生成工具使用。因此不应把“任意位置写一个三引号字符串”当成 Python 的通用多行注释语法。4.3 注释的四个检查点准确代码改了注释也要改适量既不写废话也不留下无法理解的黑盒解释意图多回答“为什么”少重复“做了什么”专业把注释视为团队文档避免情绪化和攻击性内容。五、控制台输入输出用户向程序提供信息是输入程序向用户展示结果是输出。图形界面、Web 页面和 API 都是交互方式但学习阶段最直接的入口是控制台。5.1print()输出nameAdaage18print(hello)print(name)print(name ,name,age ,age)print()可以接收多个参数默认用空格分隔并在最后换行。可以通过sep和end修改print(2026,09,24,sep-)# 2026-09-24print(loading,end...)print(done)# loading...done5.2 f-string把值放进字符串nameAdascore96.5print(f{name}的成绩是{score})print(f成绩保留一位小数{score:.1f}){}中可以放变量也可以放简单表达式price19.9count3print(f合计{price*count:.2f}元)5.3input()的返回值永远是字符串ageinput(请输入年龄)print(type(age))# str因此下面的代码做的是拼接不是数学加法ainput(请输入 a)# 输入 10binput(请输入 b)# 输入 20print(ab)# 1020需要先转换类型aint(input(请输入 a))bint(input(请输入 b))print(ab)# 305.4 类型转换不一定成功# int(hello) # ValueError当输入不可信时应使用异常处理try:ageint(input(请输入年龄))exceptValueError:print(输入无效请输入整数。)else:print(f明年你将{age1}岁。)还有一个非常容易被忽略的点print(bool(False))# Trueprint(bool())# Falsebool()对字符串判断的是“是否为空”不会识别单词“False”的语义。六、算术运算符Python 常用算术运算符包括、-、*、/、%、**、//。运算符含义示例结果加法也可用于字符串拼接7 29-减法7 - 25*乘法也可用于序列重复ha * 3hahaha/真除法7 / 23.5//地板除7 // 23%取余7 % 21**幂运算4 ** 2166.1 除数不能为 0# print(10 / 0) # ZeroDivisionError除零错误不是程序“有点不准”而是当前计算无法继续Python 会抛出异常。6.2//是向下取整print(7//2)# 3print(-7//2)# -4print(int(-7/2))# -3-7 / 2是-3.5。//向负无穷方向取整所以得到-4int()对浮点数转整数时则向 0 截断所以得到-3。两者不能混为一谈。6.3%与取整方向配合Python 满足这个关系a (a // b) * b (a % b)因此print(-7//2)# -4print(-7%2)# 1# -7 (-4) * 2 1当负数参与取模时不要只靠直觉猜结果应回到上面的等式检查。6.4**不只能算整数次方print(4**2)# 16print(4**0.5)# 2.0对负数底数进行非整数次幂运算时结果还可能进入复数范围print((-1)**0.5)# 近似为 1j七、关系运算符与浮点数比较关系运算符用来比较两个值返回布尔结果a10b20print(ab)# Trueprint(ab)# Trueprint(ab)# Falseprint(ab)# Falseprint(ab)# Falseprint(a!b)# True是赋值才是相等比较。7.1 字符串按字典序比较print(applebanana)# Trueprint(Zooapple)# True字符串比较是逐个字符按 Unicode 码点进行它不等同于自然语言中面向用户的排序规则。大小写、重音符号和语言区域都可能影响期望结果。7.2 链式比较Python 可以直接写出贴近数学习惯的范围判断age25print(18age60)它等价于对中间值只求值一次的链式比较语义接近18ageandage607.3 浮点数不宜直接用print(0.10.2)# 0.30000000000000004print(0.10.20.3)# False这不是 Python 的算术出错而是许多十进制小数无法被有限位二进制浮点数精确表示。不要只写一个神秘的固定差值标准库的math.isclose()同时支持相对容差与绝对容差importmath a0.10.2b0.3print(math.isclose(a,b))print(math.isclose(a,b,rel_tol1e-9,abs_tol0.0))如果比较的量可能接近 0绝对容差往往也很重要print(math.isclose(1e-12,0.0,abs_tol1e-9))# True容差应来自业务允许的误差范围而不是为了“让测试通过”随意调大。金额等需要精确十进制语义的场景通常应考虑decimal.Decimal。八、逻辑运算符与短路求值Python 的逻辑运算符为and、or、notA and B只有两者都为真时整体才为真A or B只要至少一个为真整体就为真not A对真值取反。age25has_ticketTrueprint(age18andhas_ticket)print(age18ornothas_ticket)8.1 短路求值对and而言左边为假时整体已经不可能为真因此右边不再执行。对or而言左边为真时整体已经确定为真右边也不再执行。print(Falseand10/0)# False右侧未执行print(Trueor10/0)# True右侧未执行短路常用于安全前置检查denominator0ifdenominator!0and10/denominator2:print(条件成立)第一个条件为假后除法不会执行从而避免除零。8.2and和or返回的不一定是bool这是从“会用”到“真正理解”的一个重要细节。and与or返回的是决定结果的那个操作数print(orguest)# guestprint(Adaandonline)# onlineprint(0and100)# 0Python 会对对象进行真值测试。常见假值包括False、None、数字0、空字符串与空容器。这种写法可用于默认值但要小心把合法的0或空字符串也当成“缺失”。九、赋值、拆包、复合赋值与交换表示赋值它按先右后左的思路工作先计算右侧表达式再把结果绑定给左侧名字。9.1 链式赋值ab10a与b会绑定到同一个整数对象。对整数这类不可变对象通常很直观对列表等可变对象则要特别小心ab[]a.append(1)print(b)# [1]这不是b“偷看了”a而是两个名字从一开始就绑定到同一个列表。9.2 多元赋值与拆包name,ageAda,18print(name)print(age)左右数量应匹配否则会触发ValueError# a, b 1, 2, 3 # too many values to unpack9.3 交换变量a10b20a,bb,aprint(a,b)# 20 10可以概念上理解为先取得右侧b和a的值再按位置分别绑定给左侧a和b所以不需要手写临时变量。9.4 复合赋值count10count1count*2print(count)# 22Python 支持、-、*、/、//、%、**等复合赋值但不支持 C/C/Java 中的和--count1# 正确# count # SyntaxError值得注意的是对可变对象而言可能就地修改原对象它不能在所有类型上简单当成x x y的完全等价文本替换。十、综合实战一个更稳健的成绩计算器现在把变量、类型转换、输入输出、算术运算、关系运算和逻辑运算组合起来。目标是读取 4 门课成绩验证范围计算平均分并输出是否合格。try:chinesefloat(input(请输入语文成绩))math_scorefloat(input(请输入数学成绩))englishfloat(input(请输入英语成绩))python_scorefloat(input(请输入 Python 成绩))exceptValueError:print(输入无效成绩必须是数字。)else:all_valid(0chinese100and0math_score100and0english100and0python_score100)ifnotall_valid:print(输入无效每门成绩必须在 0 到 100 之间。)else:totalchinesemath_scoreenglishpython_score averagetotal/4passedaverage60print(f总分{total:.1f})print(f平均分{average:.2f})print(f结果{合格ifpassedelse不合格})这段代码体现了一条清晰的数据处理链路input()获得字符串float()尝试转换失败时进入except用链式比较和and验证范围用算术表达式计算总分和平均分用 f-string 格式化输出。初学阶段重复写 4 次输入是为了突出当前语法知识。学习列表、循环和函数后应把这段代码重构为更易扩展的形式。十一、常见误区与自测练习11.1 高频误区误区一把当成相等比较是赋值是比较。a 10是让名字a绑定到数值 10不是在做数学命题。误区二认为input()会自动识别数字input()返回str。输入10不等于得到整数10算术计算前要用int()或float()转换。误区三认为bool(False)是False非空字符串的真值是True。如果要解析用户输入的布尔文本应显式定义可接受的词汇rawinput(是否继续(y/n) ).strip().lower()should_continuerawin{y,yes}误区四对浮点计算结果直接用浮点误差是表示方式的结果。近似比较优先使用math.isclose()精确十进制业务要考虑Decimal。误区五把//理解成单纯删掉小数部分//向负无穷取整因此-7 // 2是-4不是-3。误区六把三引号等同于通用多行注释三引号创建字符串。放在模块、函数或类的开头时它是 docstring会被工具与运行时元数据使用并非普通注释。误区七认为and与or永远返回True或False它们根据真值测试决定是否继续并返回其中一个操作数。需要布尔值时可显式使用bool()。11.2 自测题1 2 * 3和(1 2) * 3分别得到什么为什么input()读取的10与20相加得到1020int、float、str、bool各适合表示什么数据-7 // 2与int(-7 / 2)分别是多少为什么0.1 0.2 0.3是False推荐如何比较False and 10 / 0为什么不会抛出除零异常a b []后执行a.append(1)b是什么为什么bool(False)的结果是什么a, b b, a为什么可以交换两个变量Python 为什么不支持应怎样写自增 111.3 参考答案分别是7和9括号改变了求值顺序。因为input()返回str对两个字符串表示拼接。依次是整数、浮点数、文本字符序列、真假状态。分别是-4和-3前者向下取整后者向 0 截断。许多十进制小数无法用有限位二进制浮点数精确表示推荐使用math.isclose()并设置业务合理的容差。and发生短路左侧为假后右侧不再执行。b也是[1]因为a与b绑定到同一个可变列表。True因为它是非空字符串。概念上先对右侧求值再按位置将结果绑定给左侧名字。Python 没有前置/后置自增运算符直接写value 1。总结这一讲的知识点看起来很多但可以收束成一条稳定的主线字面值提供数据运算符把数据组成表达式变量是名字与对象的绑定而不是固定类型的物理盒子类型决定表示与操作int、float、str、bool的规则不能随意混用input()返回字符串转换类型时要考虑失败运算符不只是符号还包含优先级、类型规则、取整方向和短路语义浮点数是近似表示工程比较需要合理容差。真正值得掌握的不是每个符号孤立的读法而是面对一行代码时能够按顺序问出数据是什么类型表达式按什么顺序求值中间会不会转换、舍入或短路最终又把结果绑定到哪个名字把这条思考链建立起来后面学习条件、循环、函数和容器时语法就不会再是零散的记忆点。 如果这篇文章对你有帮助欢迎点赞、收藏与关注。 下一篇继续学习 Python 的条件判断与循环结构。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

游戏逆向分析系统方法论:从目标建模到反调试对抗的完整路径 2026/10/1 16:38:20

游戏逆向分析系统方法论:从目标建模到反调试对抗的完整路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
打家劫舍动态规划详解:从状态定义到滚动数组优化 2026/10/1 16:38:06

打家劫舍动态规划详解:从状态定义到滚动数组优化

最近刷 LeetCode Hot100 刷到第 68 题,正好是 198. 打家劫舍。这题在动态规划里算是最经典的“入门题中的入门题”,但真正能一次写对的人并不多。我见过不少面试者上来就写递归,写一半卡壳;也有人用贪心思路,反例一跑就…

阅读更多 →
DSP国产替代全解析:C2000生态壁垒与F28335迁移实战 2026/10/1 16:37:59

DSP国产替代全解析:C2000生态壁垒与F28335迁移实战

过去这轮芯片缺货里,最难受的不只是ST的客户,TI C2000系列的用户其实更憋屈。TMS320F28335这颗服役十几年的老将,至今仍是电机控制、数字电源、车载OBC项目里的常青树,结果交期一拖,很多人被迫第一次认真研究DSP国产替…

阅读更多 →
HAProxy超时配置与负载均衡算法实战:从线上故障到最佳实践 2026/10/1 16:37:52

HAProxy超时配置与负载均衡算法实战:从线上故障到最佳实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
I2C总线死锁实战:从模式状态机、时钟延展与九脉冲恢复全解析 2026/10/1 16:37:52

I2C总线死锁实战:从模式状态机、时钟延展与九脉冲恢复全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ESP32接入大模型不等于AI硬件:端侧部署的八大工程挑战 2026/10/1 16:37:52

ESP32接入大模型不等于AI硬件:端侧部署的八大工程挑战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉