Python 基础知识:运算符与表达式 摘要:本文系统讲解 Python 赋值运算符、运算符优先级、条件表达式与浮点数精度处理等核心语法,并通过简易计算器、商品折扣、BMI 评估等实战案例,带你边学边练,快速掌握表达式与运算符的灵活运用。引言欢迎来到 Python 表达式与运算符的实战教程!本文面向 Python 初学者,将系统讲解赋值运算符、运算符优先级、条件表达式等核心语法,帮助你打下扎实的编程基础。我们会从最基础的变量赋值讲起,逐步深入到复合赋值运算符、括号嵌套规则,再到简洁高效的条件表达式。为了让知识真正落地,文中穿插了简易计算器、商品折扣、BMI 评估等贴近生活的实战案例,带你边学边练,在动手实践中掌握表达式与运算符的灵活运用。无论你是刚接触编程的新手,还是想巩固基础的学习者,相信这篇文章都能让你有所收获。1 赋值运算符简化变量更新操作在编写程序时,我们经常需要对变量进行更新操作,比如累加、累减、累乘等。如果每次都写完整的表达式,代码会显得冗长且容易出错。赋值运算符(Assignment Operators)正是为了解决这个问题而设计的,它能把「变量 = 变量 运算符 值」的写法简化为「变量 运算符= 值」。1.1 基础赋值运算符最基础的赋值运算符就是等号=,它把右侧的值赋给左侧的变量:count=10# 把 10 赋给变量 countname="Python"# 把字符串赋给变量 name1.2 复合赋值运算符复合赋值运算符把「运算」和「赋值」合并成一步,常见的有以下几种:运算符示例等价写法含义+=x += 5x = x + 5加后赋值-=x -= 3x = x - 3减后赋值*=x *= 2x = x * 2乘后赋值/=x /= 4x = x / 4除后赋值//=x //= 2x = x // 2整除后赋值%=x %= 3x = x % 3取余后赋值**=x **= 2x = x ** 2幂运算后赋值1.3 实战对比:累加操作下面用两种写法实现同一个功能——把 1 到 5 累加起来,直观感受复合赋值运算符带来的简洁性。写法一:完整表达式total=0total=total+1total=total+2total=total+3total=total+4total=total+5print(total)# 输出 15写法二:复合赋值运算符total=0foriinrange(1,6):total+=i# 等价于 total = total + iprint(total)# 输出 15可以看到,total += i不仅写法更简洁,语义也更清晰——一眼就能看出这是在「累加」。1.4 使用注意事项使用复合赋值运算符时有几点需要留意:变量必须先初始化:x += 1要求x已经存在,否则会报NameError。注意运算顺序:x *= 2 + 3等价于x = x * (2 + 3),先算右侧表达式再赋值。浮点数精度:/=得到的是浮点数,例如x = 5; x /= 2后x为2.5。1.5 小结复合赋值运算符把「运算 + 赋值」合并为一步,让代码更简洁、可读性更强。在循环累加、计数器更新、状态切换等场景中非常实用,是每个开发者都应熟练掌握的基础语法。2 运算符优先级与括号嵌套规则在编写表达式时,运算符的执行顺序直接决定了计算结果。理解运算符优先级(Operator Precedence)和括号嵌套规则,能帮助我们写出正确、可读性强的代码,也能避免很多隐蔽的逻辑错误。2.1 运算符优先级一览Python 中常见运算符的优先级从高到低排列如下:优先级运算符说明高**幂运算↓*///%乘、除、整除、取余↓+-加、减↓==!===比较运算低andornot逻辑运算优先级高的运算符会先被计算。例如:result=2+3*4print(result)# 输出 14,而不是 20因为*的优先级高于+,所以先计算3 * 4 = 12,再计算2 + 12 = 14。2.2 括号改变运算顺序括号()可以强制改变运算顺序,括号内的表达式总是最先被计算:result=(2+3)*4print(result)# 输出 20加上括号后,先计算2 + 3 = 5,再计算5 * 4 = 20。括号让表达式的意图更加明确,即使不加括号结果相同,也建议用括号增强可读性。2.3 括号嵌套规则当表达式中有多层括号时,遵循「由内向外」的计算顺序——最内层的括号最先计算,逐层向外展开:result=((1+2)*(3+4))-5# 第一步:1 + 2 = 3# 第二步:3 + 4 = 7# 第三步:3 * 7 = 21# 第四步:21 - 5 = 16print(result)# 输出 16嵌套括号时要注意以下几点:括号必须成对出现:每个左括号(都必须有对应的右括号)。层级要清晰:嵌套过深会降低可读性,建议拆分成多个变量分步计算。避免多余括号:不要为了「保险」而滥用括号,保持表达式简洁。2.4 实战对比:复杂表达式下面用两种方式计算同一个公式——(a + b) * (a - b),对比直接写和分步写的区别。写法一:直接嵌套括号a=10b=3result=(a+b)*(a-b)print(result)# 输出 91写法二:分步计算a=10b=3sum_ab=a+b# 13diff_ab=a-b# 7result=sum_ab*diff_abprint(result)# 输出 91两种写法结果相同,但分步计算时每一步的中间结果都有明确的变量名,代码更容易理解和调试。2.5 小结运算符优先级决定了表达式的计算顺序,括号则能显式地控制这一顺序。掌握「先乘除后加减」「括号由内向外」这两条核心规则,再配合适度使用括号增强可读性,就能写出既正确又清晰的表达式。3 动手实战:编写简易计算器程序前面学习了赋值运算符和运算符优先级,现在我们把它们综合运用起来,动手编写一个简易计算器程序。这个实战项目会用到+、-、*、/四则运算,以及复合赋值运算符和括号,帮助你巩固前面学到的知识。3.1 需求分析我们要实现一个命令行简易计算器,支持以下功能:输入两个数字和一个运算符(+、-、*、/)。根据运算符执行对应的计算。输出计算结果。处理除数为 0 的异常情况。3.2 基础版本:四则运算先实现一个最基础的版本,用if分支判断运算符并执行计算:# 简易计算器 - 基础版本num1=float(input("请输入第一个数字: "))operator=input("请输入运算符 (+ - * /): ")num2=float(input("请输入第二个数字: "))ifoperator=="+":result=num1+num2elifoperator=="-":result=num1-num2elifoperator=="*":result=num1*num2elifoperator=="/":ifnum2==0:print("错误:除数不能为 0!")else:result=num1/num2print(f"结果:{num1}/{num2}={result}")else:print("不支持的运算符!")运行示例:请输入第一个数字: 10 请输入运算符 (+ - * /): + 请输入第二个数字: 5 结果: 10.0 + 5.0 = 15.03.3 进阶版本:连续计算基础版本每次只能计算一次。我们可以用while循环和复合赋值运算符,让计算器支持连续累加、累乘等操作:# 简易计算器 - 连续累加版本total=0.0print("开始累加计算,输入 0 结束程序")whileTrue:num=float(input("请输入一个数字 (输入 0 结束): "))ifnum==0:breaktotal+=num# 复合赋值运算符:等价于 total = total + numprint(f"当前累计结果:{total}")print(f"最终结果:{total}")运行示例:开始累加计算,输入 0 结束程序 请输入一个数字 (输入 0 结束): 5 当前累计结果: 5.0 请输入一个数字 (输入 0 结束): 3 当前累计结果: 8.0 请输入一个数字 (输入 0 结束): 2 当前累计结果: 10.0 请输入一个数字 (输入 0 结束): 0 最终结果: 10.03.4 综合版本:带括号的表达式结合第 2 节学习的括号嵌套规则,我们还可以让计算器支持带括号的表达式。这里用 Python 内置的eval()函数演示(注意:eval()仅用于学习演示,实际项目中要谨慎使用):# 简易计算器 - 表达式版本expression=input("请输入数学表达式 (例如: (2 + 3) * 4): ")result=eval(expression)print(f"{expression}={result}")运行示例:请输入数学表达式 (例如: (2 + 3) * 4): (2 + 3) * 4 (2 + 3) * 4 = 203.5 小结通过这个实战项目,我们把赋值运算符、复合赋值运算符、运算符优先级和括号嵌套规则综合运用到了实际代码中。从基础的四则运算到连续累加,再到带括号的表达式计算,每一步都在巩固前面学到的知识。建议你在此基础上继续扩展,比如增加取余、幂运算等功能,让计算器更强大。4 常见语法报错分析与快速修复在编写 Python 程序时,尤其是刚接触赋值运算符、运算符优先级和括号嵌套时,很容易遇到各种语法报错。本节整理了几类最常见的错误,并给出快速修复方法,帮助你少走弯路。4.1 NameError:变量未定义错误示例:total+=1# 报错:NameError: name 'total' is not defined原因分析:使用复合赋值运算符+=时,要求左侧变量已经存在。如果变量从未被赋值,Python 无法读取它的当前值,就会抛出NameError。快速修复:在使用复合赋值运算符之前,先给变量一个初始值:total=0# 先初始化total+=1# 现在可以正常累加4.2 SyntaxError:括号不匹配错误示例:result=(2+3*4# 报错:SyntaxError: '(' was never closed原因分析:左括号(没有对应的右括号),Python 解析到行尾仍未找到闭合括号,于是报语法错误。这在嵌套括号时尤其容易发生。快速修复:检查括号是否成对出现,补上缺失的右括号:result=(2+3)*4# 正确小技巧:在 IDE 中,光标停在某个括号上时,编辑器会高亮与之配对的括号,利用这个特性可以快速定位不匹配的位置。4.3 TypeError:类型不匹配错误示例:num=input("请输入数字: ")# input 返回的是字符串result=num+5# 报错:TypeError: can only concatenate str (not "int") to str原因分析:input()函数返回的是字符串类型,直接用字符串和整数做加法,Python 无法自动转换,就会抛出TypeError。快速修复:使用int()或float()把输入转换为数字类型:num=float(input("请输入数字: "))result=num+5# 正确4.4 ZeroDivisionError:除数为零错误示例:a=10b=0result=a/b# 报错:ZeroDivisionError: division by zero原因分析:在 Python 中,任何数除以 0 都会抛出ZeroDivisionError。这在计算器程序中很常见,因为用户可能输入 0 作为除数。快速修复:在除法运算前先判断除数是否为 0:a=10b=0ifb==0:print("错误:除数不能为 0!")else:result=a/bprint(result)4.5 IndentationError:缩进错误错误示例: