当前位置: 首页 > news >正文

从零开始的python学习——注释与运算符

ʕ • ᴥ • ʔ

づ♡ど

 🎉 欢迎点赞支持🎉

个人主页:励志不掉头发的内向程序员;

专栏主页:python学习专栏;


文章目录

前言

一、注释

1.1、注释是什么

1.2、注释的语法

1.3、注释的规范

二、输入与输出

2.1、和用户交互

2.2、通过控制台输出

2.3、通过控制台输入

三、运算符

3.1、算术运算符

3.2、关系运算符

3.3、逻辑运算符

3.4、赋值运算符

3.5、其他......

总结


前言

本章节我们就来看看我们 Python 中的各种运算符吧,在看运算符之前我们会先来介绍一下我们Python 的一个比较有用的功能,就是注释。我们一起来看看吧。


一、注释

1.1、注释是什么

注释是一种特殊的代码,它不会影响到程序的执行,但是能够起到解释说明的作用,能够帮助程序猿理解程序代码的执行逻辑。

我们都知道写代码是十分烧脑的,里面融入了自己思想和逻辑。但是我们读代码一样十分的烧脑,因为我们可能同一件事情会有很多解法,但是读代码得去理解别人的思想和解决方式就更难了,这个时候一个好的注释就能够起到相当大的作用了。

# 计算 4 个数字 65.3,78.8,95.3,58.1 的方差
avg = (65.3 + 78.8 + 95.3 + 58.1) / 4
total = (65.3 - avg) ** 2 + (78.8 - avg) ** 2 + (95.3 - avg) ** 2 + (58.1 - avg) ** 2
result = total / 3
print(result)

比如上面的这一串代码,如果我们不写注释可能很难理解,甚至根本不知道在干什么,此时如果在旁边写了注释就显而易见的得出答案了。当然注释乱写也是不可取的。

我们的代码先是给人看的,然后才是计算机看。我们写一个好的注释,不但是方便别人,同样也是方便未来运营的自己。

我们要是注释都是这样写或者根本不写。

未来要是忘记了想去看注释时是有多崩溃啊。

1.2、注释的语法

Python 注释有两种风格

(1)注释行

使用 # 开头的行都是注释。

# 这是一行注释

此注释一般都是写在要注释的代码上方的。也有少数情况是要写在注释代码的右侧的。很少会写在代码的下方,写到左侧更不可能(这样就会把代码注释掉)。

当然有的时候我们得批量的使用注释,这个时候我们就可以先批量的选中我们想要注释代码,然后同时按 ctrl + / 即可,这样操作就可以把我们不想要的代码注释掉,就不会进入程序运行了。

(2)文档字符串

使用三引号引起来的称为 “文档字符串”,也可以视为是一种注释。

  • 可以包含多行内容。
  • 一般放在 文件/函数/美 的开头。
  • """ 或者 "" 均可(等价)。
"""
这是文档字符串
这是文档字符串
"""
"
这是文档字符串
这是文档字符串
"

1.3、注释的规范

当然,我们的注释和变量命名不同,它不参与我们代码的运行,所以没有硬规则。但是它还是有一些建议遵守的软规则,我们来了解一下。

1、内容准确:注释内容要和代码一致、匹配,并在代码修改时及时更新。

2、篇幅合理:注释既不应该太精简,也不应该长篇大论。

3、使用中文:一般中国公司都要求使用中文写注释,外企另当别论。

4、积极向上:注释中不要包含负能量。

二、输入与输出

2.1、和用户交互

程序需要和用户进行交互。

  • 用户把信息传递给程序的过程,称为 “输入”。
  • 程序把结果展示给用户的过程,称为 “输出”。

输入输出的最基本的方法就是控制台,用户通过控制台输入一些字符串,程序再通过控制台打印出一些字符串。

对于机械的操作面板,就叫做控制台,控制台上会有一些按钮、开关、操作杆.....。后来有了计算机之后,控制台的概念也就延续下来了,只不过计算机是通过键盘鼠标等进行操作,把操作结果显示到屏幕上。

计算机中,把用户能输入命令,向计算机安排工作,计算机再把结果给显示出来的程序就称之为控制台。

PyCharm 运行程序,下方弹出的窗口就可以视为是控制台。

windows 自带的 cmd 程序,也可以视为是控制台。

控制台是一种人和计算机交互的最基础方式,但是在日常生活中却不常用,原因是因为要靠指令工作,难上手。更常见的交互方式是图形化界面,就是点击一下图标就能完成,这样不用记忆就方便完成各种工作了。

2.2、通过控制台输出

Python 使用 print 函数输出到控制台。

print('hello')

不仅能输出一个字符串,还可以输出一个其他类型的变量

a = 10
print(a)b = True
print(b)

当然我们大部分情况都是我们字符串加其他变量混合输出,此时该怎么做呢?

我们的解决办法有很多,我们这里来看一种最简单的方法。

a = 10
# 希望使用 print 打印出 "a = 10" 这样的内容
# 我们希望把数字和字符串混合在一起来打印
print(f"a = {a}")

我们这种方法称之为 “格式化字符串”,Python中有一个专门的术语叫做f-string,此处的 f 是 “format”。当我们在 print中加入 f 的时候,此时我们就可以在字符串中嵌入 { } 这样的语法,往字符串里嵌入变量或者表达式了。

我们也可以在 { } 进行运算操作。

print(f"a = {a + 10}")

2.3、通过控制台输入

Python 使用 input 函数,从控制台读取用户的输入。

input 和 print 一样也是 Python 的一个内置函数。

num = input('请输入一个整数:')
print(f'您输入的数字是 {num}')

在 input 内部我们可以设置输入时的提示词,同时再用一个变量来保存起来,这样就实现了一次输入的效果。

input 在执行时就会等待用户输入,这个等待可能是一个非常长的等待,完全取决于用户什么时候输入。

实际上 input 返回的类型是字符串,别看我们输入的是一个整数,但实际上得到的类型是字符串。

num = input('请输入一个整数:')
print(type(num))
print(f'您输入的数字是 {num}')

如果只是单纯的拿到用户的输入,然后打印,此时就按照 str 打印即可。但是如果需要根据用户输入的内容进行算术运算,此时就需要先把读到的 str 转换成整数,我们可以使用

想转换的类型(要转换的变量名)

如:int( num )

num = input('请输入一个整数:')
print(f'您输入的数字是 {num + 10}')

这样运行时会报错。

num = input('请输入一个整数:')
num = int(num)
print(f'您输入的数字是 {num + 10}')

这里我们把 num 转换成 int 类型在赋值给 num,这归功于 Python 的动态类型。

这样就可以了,当然也可以转换成别的类型。大家可以自己去试试。

三、运算符

3.1、算术运算符

像 + - * / % ** // 这种进行算术运算的运算符,称为算术运算符。

加减乘除这几个算术运算符都比较好理解,我们知道先算乘除,后算加减即可。在运算过程中想要修改运算顺序就得加()。当然这里还要注意除数不能是0。

print(10 / 0)

如果是0在运行时就会报错。

同时我们除数除了上面的问题,还有一个截断的问题,在 Python 中整数除以整数结果可能是小数。因为除了 Python 外大部分的编程语言都是整数除以整数得到的依然是整数。

print(1 / 2)

前面也有说明 ** 这个算术运算符的作用就是乘方的,如果它和 + - * / 这些符号在一起时它的优先级是最高的,也就是先算乘方,再算乘除。

result = 1 + 2 * 3 - 2 ** 2 + 10
print(result)

你们可以自己先算一下是不是这个结果。

当然,我们的乘方不单单支持整数次方,也还是支持小数次方的,也就是开方运算。就比如2的0.5次方就相当于根号2。

print(4 ** 2)
print(4 ** 0.5)

我们 % 运算符不是求百分数,而是求余数,就是看一个数整除完另外一个数还剩下多少。

print(7 % 3)

相当于7可以给3整除2,还剩下一个1不能整除,得到的余数肯定小于除数的。因为如果比除数大的化就能整除了,那就没必要余下这么多了。

我们 // 在 Python 中表示地板出发,也叫做取整除法而不是注释。它会针对计算的结果进行 “向下取整”。

print(7 // 2)

我们可以看出我们的结果是3而不是3.5啦,这就是把我们3.5向下取整了。我们负数也是满足向下取整,也就是往更小的地方取整的。

print(-7 // 2)

我们-7/2应该是-3.5,由于-4比-3小,所以向下取整就是-4了。

3.2、关系运算符

像 < <= > >= == != 这一系列的运算符称为关系运算符,它们是在比较操作数之间的关系

其中

  • <= 是 “小于等于”
  • >= 是 “大于等于”
  • == 是 “等于”
  • != 是 “不等于”

我们的关系运算符和我们数学中学的还是有区别的,就比如等于数学是 =,而计算机是 ==;不等于在数学上是一个 = 加一个 \,但是键盘上不好敲,所以就变成了 !=。大家要主要区分。

(1)如果关系符合,则表达式返回True,如果关系不符合,则表达式返回False。

我们关系运算符对应的表达式,值是布尔类型,也就是 真 或 假。

a = 10
b = 20print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

我们整数可以之间用 == 进行比较,但是我们浮点数直接进行 == 比较相等,存在一定的风险,因为我们浮点数在内存中的存储和表示,是可能存在误差的,这样的误差在进行算术运算的时候就可能被放大,从而表示 == 的判定出现误判。

print(0.1 + 0.2 == 0.3)

我们可以看出这里结果就出现了误差,我们把这些数据都打印出来看看。

print(0.1 + 0.2 == 0.3)
print(0.1)
print(0.2)
print(0.1 + 0.2)
print(0.3)

我们可以看出我们进行相加的时候产生的误差会使其产生误判,虽然误差十分小,但是也不可被忽视。

那我们该怎么正确的进行浮点数的比较呢?

我们这里的方法就是做差,看看我们的差值是不是小于我们的误差范围。

a = 0.1 + 0.2
b = 0.3print(-0.0000001 < (a - b) < 0.0000001)

我们是看这个差值是不是在我们框定的误差范围区间,如果是则就认为是相等。

当然,向我们上面的 -0.0000001 < (a - b) < 0.0000001,运用了连续赋值的写法,这种写法在C++/Java 中都是不支持的,Python 中支持这种连续小于的写法。

(2)关系运算符不光针对整数/浮点数进行比较,还能针对字符串进行比较。

我们数字比较大于小于可以,但是我们字符串也可以比较大于小于吗?

a = 'hello'
b = 'world'print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

确实是可以的,但是比较规则是什么呢?其实是按照字典序来比较的。我们在英文字典上,单词是按照一定的顺序排序的,先看首字母在字母表的顺序,比如有的是h开头的,而有的是w开头的,而w字面在字母表上在h字面后面。所以w开头的字面就比h开头的字面大。首字母相同就依次比较第二个,然后再比较第三个,一直往后比较,如果到最后都一样,那就看谁比较长,长的就大。如果一样长那就相等了。

如果是中文该怎么比较呢,其实我们无法比较中文,因为针对中文进行字符串比较是没有意义。在计算机中,表示中文,其实是用多个字节构成的一个比较大的数字来比较的。虽然我们按照字典序确实还是能比较出大小的,但是这个大小比较出来没有意义。

3.3、逻辑运算符

像 and or not 这一系列的运算符称为逻辑运算符。

  • and 并且,两端操作数均为 True,最终结果为True,否则为 False(一假则假)。
  • or 或者,两侧操作数均为  False,最终结果为 False,否则为 True(一真则真)。
  • not 逻辑取反,操作数本身为 True,则返回 False,本身为 False,则返回 True。

就比如我们给别人赔礼道歉,别人要求我们赔他一个棒棒糖和一袋薯片,我们就得把这两个赔给他,缺一不可。如果是一个棒棒糖或者一个薯片,那我们赔他一个即可,但是不能都不赔。

a = 10
b = 20
c = 30
print(a < b and b < c)

我们这个意思就是如果我们 a 小于 b 且 b 小于 c 就返回 True,不然就返回 False。

当然我们看到我们的代码下面会有一个黄色波浪号,这是我们编译器觉得这个地方写的不好,可以优化,但是不影响程序运行时的现象。

我们可以点击旁边的黄色灯泡看看原因。

再点击简化链式比较。

我们的代码就变成了这样,也就是说我们 Python 中 a < b < c 和 a < b and b < c 是等价的,我们更加支持 a < b < c 的写法。更加简单直观。

a = 10
b = 20
c = 30
print(a > b or b < c)
print(a < b or b > c)
print(a > b or b > c)

第一个就是我们 a > b 和 b < c 只要满足其中一个即可,两个都满足也行,就会返回 True,如果全部不成立就会返回 False。

a = 10
b = 20
c = 30
print(not a > b)
print(not a < b)

我们可以看的,我们 a < b 是成立的,应该返回 True,而 a > b 是不成立的,应该返回 False。但是 not 是取反符,所以结果是反过来的。

我们逻辑运算中有个重要的细节,那就是短路求值。

对于 and 操作来说,如果左侧表达式为 False,那么整体的值一定是 False,右侧表达式不必求值。

对于 or操作来说,如果左侧表达式为 True,那么整体的值一定是 True,右侧表达式不必求值。

a = 10
b = 20
print(a > b and 10 / 0 == 1)

我们看这个代码,我们 a > b 已经是 False了,按道理来说我们编译器不会去管后面是什么,直接返回 False即可,我们的后面把0当除数了,如果编译器会管后面就会出问题报错,我们来运行看看我们程序会不会报错吧。

没有报错,这就说明了我们的短路求值是存在的,我们让前面的 a > b 变成 a < b 试试。

3.4、赋值运算符

(1)= 的使用

  • = 表示赋值:这个我们已经用过很多次了,注意和 == 区分。
  • = 除了基本的用法之外,还可以同时针对多个变量进行赋值。

我们赋值的含义是把右侧的值填充到左侧的空间中去。我们左侧的空间一定得是变量而不能是常量。

链式赋值:

我们可以一次性赋值很多个变量。

a = b = 20

这样的操作是先把 20 赋值给 b,再把 b 赋值给 a。这样就相当于

a = 20
b = 20

这种操作就叫做链式赋值。这种操作虽然是合法的,但是我们日常开发时不建议这么赋值,我们还是尽量一行代码就只包含一个操作。

多元赋值:

我们还有一种可以一次赋多个值的方式。

a, b = 10, 20

这种写法就是把我们的 10 赋给了 a,20 赋给了 b。

像这种通过逗号一次性赋多个值的方式我们称为多元赋值。这种方法我们也不是很推荐,但是它能帮助我们解决一些特殊问题。就比如我们完成两个变量的交换。

正常的办法我们想把 a 和 b 的值进行交换我们得多创建一个变量来保存我们其中一个的值。

a = 10
b = 20tmp = a
a = b
b = tmp
print(a)
print(b)

但是我们可以用多元赋值的方式解决。

a = 10
b = 20a, b = b, a
print(a)
print(b)

(2)复合赋值运算符

Python 还有一些复合赋值运算符,例如 += -= *= /= %=

其中 a += 1 等价于 a = a + 1,其他复合赋值运算符也是同理。

a = 0
a = a + 1
print(a)

以上的代码我们也可以简化的写成这样。

a = 0
a += 1
print(a)

这两个代码效果是等价的。+= 就是 + .... =的复合赋值运算符。除了 +=,像我们的 -= *= /= %= **=都是如此。

当然这种操作我们必须先定义了,我们不能读取没有定义过的变量的。

我们 Python 中不支持 ++ -- 这样的自增自减操作的。我们使用 a += 1 就已经很方便的完成自增了,就没有必要再去实现这些自增自减的操作了。

3.5、其他......

除了上述之外,Python 中还有一些运算符,比如身份运算符(is,is not),成员运算符(in,not in),位运算符(& | - ^ << >>)等。此处咱们暂时不介绍。


总结

我们到目前为止已经学了比较多的基础内容了,像之前的常量、变量、类型,再到这里的各种运算符。大家要记得好好吸收,不要学的太快,要留时间给自己沉淀。下一章节我们就会来讲讲我们 Python中的各种语句啦。大家加油。

🎇坚持到这里已经很厉害啦,辛苦啦🎇

ʕ • ᴥ • ʔ

づ♡ど

http://www.dtcms.com/a/357913.html

相关文章:

  • Codeforces Round 1033 (Div. 2) and CodeNite 2025 vp补题
  • Oracle 数据库性能调优:从瓶颈诊断到精准优化之道
  • DeepSeek应用技巧-通过MCP打造数据分析助手
  • 现代 Linux 发行版为何忽略Shell脚本的SUID位?
  • 深入 MySQL SELECT 查询
  • windows 谷歌浏览器把英文改成中文
  • 面试 八股文 经典题目 - Mysql部分(一)
  • 数据结构--栈(Stack) 队列(Queue)
  • 从单机到分布式:Python 爬虫架构演进
  • kmp 算法
  • 【MLLM】多模态理解Ovis2.5模型架构和训练流程
  • 模式组合应用-组合模式
  • 加速智能经济发展:如何助力“人工智能+”战略在实时视频领域的落地
  • 时间轴组件开发:实现灵活的时间范围选择
  • More Effective C++ 条款17: 考虑使用缓式评估(Consider Using Lazy Evaluation)
  • centos7.9的openssh漏洞修复脚本
  • 软考 系统架构设计师系列知识点之杂项集萃(137)
  • 响应式编程框架Reactor【5】
  • PostgreSQL表空间(Tablespace)作用(管理数据库对象的存储位置)(pg_default、pg_global)
  • STL库——list(类模拟实现)
  • 将LLM模型“钉”在电路板上:用电阻矩阵实现物理推理引擎
  • Nacos-3.0.3 适配PostgreSQL数据库
  • openGauss笔记
  • rabbitMQ延时队列实现,怎么保证消息的幂等
  • HTML 核心元素实战:超链接、iframe 框架与 form 表单全面解析
  • 【WDG协议栈】AUTOSAR架构下WDG模块软硬件功能详解
  • 基于单片机指纹考勤系统/智能考勤
  • ⸢ 叁 ⸥ ⤳ 默认安全:概述与建设思路
  • 【Day 33】Linux-MySQL 备份与恢复详解
  • 从分子工具到技术革新:链霉亲和素 - 生物素系统与 M13 噬菌体展示的交叉应用解析