【Python】2. 基础语法

常量和表达式

我们可以把 Python 当成一个计算器, 来进行一些算术运算.
在这里插入图片描述

注意:
print 是一个 Python 内置的 函数, 这个稍后详细介绍.
可以使用 + - * / ( ) 等运算符进行算术运算. 先算乘除, 后算加减.
运算符和数字之间, 可以没有空格, 也可以有多个空格. 但是一般习惯上写一个空格(比较美观).

形如 1 + 2 - 3 这样是算式, 在编程语言中称为 表达式,
算式的运算结果, 称为 表达式的返回值
其中 1 , 2 , 3 这种称为 字面值常量, + - * / 这种称为 运算符 或者 操作符.
举例:

print((67.5 + 89.0 + 12.9 + 32.2) / 4)

运算结果(返回值):50.400000000000006

变量和类型

变量是什么

有的时候, 我们需要进行的计算可能更复杂一些, 需要把一些计算的中间结果保存起来. 这个时候就需要用到 变量.

示例
给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的方差.
PS: 方差的计算过程: 取每一项, 减去平均值, 计算平方, 再求和, 最后除以 (项数 - 1)
在这里插入图片描述
注意:
avg, total, result 均为变量.
在 Python 中表示乘方运算. 2 即为求平方
就像计算器中的 M 键功能类似, 通过变量就可以保存计算过程中的中间结果.
= 表示"赋值运算符" 不是数学上"比较相等”

变量可以视为是一块能够容纳数据的空间. 这个空间往往对应到 “内存” 这样的硬件设备上.
在这里插入图片描述
PS: 我们可以把内存想像成是一个宿舍楼, 这个宿舍楼上有很多的房间. 每个房间都可以存放数据. 衡量内存的一个重要指标就是内存空间的大小, 比如我的电脑内存是 16GB. 这个数字越大, 意味着内存的存储空间就越大, 能够存放的数据(变量) 就越多。

变量的语法

(1) 定义变量

a = 10

创建变量的语句非常简单, 其中a 为变量名.
当我们创建很多个变量的时候, 就可以用名字来进行区分.
= 为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中.

注意: 变量的名字要遵守一定规则.
硬性规则(务必遵守)
1.变量名由数字字母下划线构成.
2.数字不能开头. 1a(不合法)
3.变量名不能和 “关键字” 重复.
4.变量名大小写敏感. num 和 Num 是两个不同的变量名.
5.不能包含特殊符号 a*a(不合法)

软性规则(建议遵守)
变量名使用有描述性的单词来表示, 尽量表达出变量的作用. (count 计数 personInfo 个人信息)
一个变量名可以由多个单词构成, 长一点没关系, 但是含义要清晰.
当变量名包含多个单词的时候, 建议使用 “驼峰命名法”. 形如 totalCount , personInfo 这种, 除
了首个单词外, 剩余单词首字母大写.

数学上, 变量通常使用 x, y, z 这种简单的英文字母或者拉丁字母表示. 但是在编程中不建议这样使用.
原因是编程中,一个程序里通常会同时创建出很多个变量.
如果只是使用单个字母表示, 在变量多了 的时候, 就很难记住哪个变量是干啥的,从而给维护程序带来了一定的困难.
因此我们更建议使用带 有明确描述性的名字, 来表示变量的用途

(2) 使用变量
在这里插入图片描述

变量的类型

变量里面存储的不仅仅是数字, 还可以存储其它种类的数据. 为了区分不同种类的数据, 我们引入了 “类型” 这样的概念.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(5) 其他
除了上述类型之外, Python 中还有 list, tuple, dict, 自定义类型 等等. 后续再介绍…
为什么要有这么多类型?
(1) 类型决定了数据在内存中占据多大空间.

int       默认是4个字节.动态扩容.
float    固定8个字节.
bool  一个字节就足够了.
str   变长的

(2) 类型其实约定了能对这个变量做什么样的操作.
例如:

int / float 类型的变量, 可以进行 + - * / 等操作
而 str 类型的变量, 只能进行 + (并且行为是字符串拼接),不能进行 - * / , 但是还能使用 len 等其他操作.

总结: 类型系统其实是在对变量进行 “归类”. 相同类型的变量(数据) 往往具有类似的特性和使用规则.

动态类型

在这里插入图片描述
在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str.
C++/Java 这样的语言则不允许这样的操作. 一个变量定义后类型就是固定的了. 这种特性则称为 “静态类型”.
动态类型特性是一把双刃剑.
对于中小型程序, 可以大大的解少代码量(比如写一段代码就可以同时支持多种类型).
对于大型程序, 则提高了模块之间的交互成本. (程序猿 A 提供的代码难以被 B 理解).
因此很多公司,在创业之初,喜欢使用Python来开发(产品规模小,也就是一两个程序猿,很快就能开发完成)
但是当项目达到一定的规模之后 动态类型的劣势就逐渐体现了
很多公司就会针对之前Python写的代码使用其他语言进行重构

注释

注释是什么

注释是一种特殊的代码, 它不会影响到程序的执行, 但是能够起到解释说明的作用, 能够帮助程序猿理解程序代码的执行逻辑.
#开头的注释,一般是写在需要注释代码的上方.
也有少数情况下是写在代码的右侧的.
很少会写在代码的下方(更不会写到代码的左侧 会将整行代码注释掉)

# 计算 4 个数字 67.5, 89.0, 12.9, 32.2 的方差
avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg) 
** 2
result = total / 3
print(result)

形如上述代码, 如果没有注释, 直接阅读, 是不容易 get 到代码的含义是计算方差.
但是通过加了一行注释解释一下, 就让人一目了然了.

PS: 代码的第一目标是容易理解, 第二目标才是执行正确.
写注释不光是为了方便别人来理解, 也是方便三个月之后的自己理解.
一个反例: 早些年医生的手写处方
在这里插入图片描述

注释的语法

Python 中有两种风格的注释.
(1) 注释行
使用 # 开头的行都是注释.

# 这是一行注释.

(2) 文档字符串
使用三引号引起来的称为 “文档字符串”, 也可以视为是一种注释.
可以包含多行内容,
一般放在 文件/函数/类 的开头.
“”" 或者 ‘’’ 均可 (等价).

"""
这是文档字符串
这是文档字符串
"""

注释的规范

在这里插入图片描述
如何进行批量化注释 按住 Ctrl + / 键

输入输出

和用户交互

程序需要和用户进行交互.
用户把信息传递给程序的过程, 称为 “输入”.
程序把结果展示给用户的过程, 称为 “输出”.
输入输出的最基本的方法就是控制台. 用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串.

举例:
PyCharm 运行程序, 下方弹出的窗口就可以视为是控制台
在这里插入图片描述
windows 自带的 cmd 程序, 也可以视为是控制台
在这里插入图片描述
在这里插入图片描述

通过控制台输出

Python 使用 print 函数输出到控制台.
不仅能输出一个字符串, 还可以输出一个其他类型的变量
在这里插入图片描述
更多的时候, 我们希望能够输出的内容是混合了字符串和变量

# 在Java中不同变量类型可以进行相加
a = 10
b = "hello"
print(a+b)
# Java采用了字符串拼接,允许字符串和其他类型的值进行拼接
# c printf,使用%d,%s这样的占位符
# C++采用了std:cout,使用<<移位符

但是在之前的学习过程中,我们了解到python无法进行字符串+整数的拼接,那python中是如何处理的呢?
在这里插入图片描述

运算符

算术运算符

像 + - * / %(求余数) ** // 这种进行算术运算的运算符, 称为 算术运算符

先算乘方,然后是乘除,最后算加减.
如果运算过程中想修改默认的运算顺序,就需要加上()

  1. 除法的第一个问题:
    在这里插入图片描述
    在这里插入图片描述
** 乘方运算
既能够支持整数次方,也支持小数次方.(开方运算)

在这里插入图片描述
在这里插入图片描述

关系运算符

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

<="小于等于">="大于等于"
=="等于"
!="不等于"

(1) 如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False(返回值的类型为布尔类型)
在这里插入图片描述
(2) 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较.
在这里插入图片描述
注意:
直接使用 == 或者 != 即可对字符串内容判定相等. (这一点和 C / Java 不同).
字符串比较大小的规则是 “字典序”

关于字典序:
想象一个英文词典, 上面的单词都是按照字母顺序排列. 如果首个字母相同, 就比较第二个字母. ( 就比如著名单词 abandon).
我们认为一个单词在词典上越靠前, 就越小. 越靠后, 就越大.

针对中文进行字符串大小比较是没有意义的. 至少按照默认的字典序来说,是没意义的!
在计算机里,表示中文,其实是用多个字节构成的一个比较大的数字来进行比较 比如:手机通讯录
在这里插入图片描述

(3) 对于浮点数来说, 不要使用 == 判定相等.
**注意: 浮点数在计算机中的表示并不是精确的! 在计算过程中, 就容易出现非常小的误差.**像这样的误差在进行算术运算时是相当致命的
在这里插入图片描述
正确的比较方式: 不再严格比较相等了, 而是判定差值小于允许的误差范围.

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

实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可

逻辑运算符

像 and or not 这一系列的运算符称为 逻辑运算符.
and 并且. 两侧操作数均为 True, 最终结果为 True. 否则为 False. (一假则假)
or 或者. 两侧操作数均为 False, 最终结果为 False. 否则为 True. (一真则真)
not 逻辑取反. 操作数本身为 True, 则返回 False. 本身为 False, 则返回 True.
在这里插入图片描述

  • 比如C++或者Java里,使用&&表示逻辑与并且 ||表示逻辑或或者!表示逻辑非 逻辑取反.

一种特殊写法:a < b and b < c 这个操作等价于 a < b < c . 这个设定和大部分编程语言都不相同.

在这里插入图片描述

赋值运算符

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

链式赋值

a = b = 10

多元赋值

a, b = 10, 20

代码实例: 交换两个变量

# 基础写法
a = 10
b = 20
tmp = a
a = b
b = tmp
# 在C语言/C++/Java中都是采用这种基础写法
# 基于多元赋值
a = 10
b = 20
a, b = b, a
# 多元赋值的用处 基于

(2) 复合赋值运算符
Python 还有一些 复合赋值运算符. 例如 += -= *= /= %=
其中 a += 1 等价于 a = a + 1 . 其他复合赋值运算符也是同理.

a = 10
a = a + 1
print(a)
b = 10
b += 1
print(b)

注意: 像 C++ / Java 中, 存在 ++ – 这样的自增/自减运算符. Python 中则不支持这种运算.
如果需要使用, 则直接使用 += 1 或者 -= 1 ++ – 最大的问题就是容易分不清前置和后置的区别.
这一点 Python 语法在设计的时候就进行了规避, 避免出现这种不直观, 并且容易混淆的语法.
在这里插入图片描述
在这里插入图片描述

其他

除了上述之外, Python 中还有一些运算符, 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符
( & | ~ ^ << >>) 等.

自测练习

(1) [多选] 以下关于变量之间加法运算的说法, 正确的是:
A. Python 中的字符串之间够能相加.
B. Python 中的字符串可以和整数相加.
C. Python 中的整数可以和浮点数相加.
D. Python 中的整数可以和布尔值相加.

【答案】ACD
A选项,字符串拼接
B选项,字符串和整数相加报错
C选项,动态类型变量变为浮点型
D选项,如果把布尔类型的值和整数进行算术运算,此时就会把 True当做1,把 False当做0,但是这样的操作,是没有意义的!!!
C/C++也是有类似的行为.但是 Java这里的做法是更合理的!! 如果出现整数和布尔混合运算,直接编译报错!!

(2) [单选] 以下 Python 代码, 合法的是
A. int a = 10
B. a = 10;
C. a = true
D. a = ‘aaa’ + 10

【答案】B
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LDR6328芯片:智能家居时代的小家电充电革新者

在当今的智能家居时代&#xff0c;小家电的供电方式正变得越来越智能化和高效化。 利用PD&#xff08;Power Delivery&#xff09;芯片进行诱骗取电&#xff0c;为后端小家电提供稳定电压的技术&#xff0c;正逐渐成为行业的新宠。在这一领域&#xff0c;LDR6328芯片以其出色的…

Qt下使用modbus-c库实现PLC线圈/保持寄存器的读写

系列文章目录 提示&#xff1a;这里是该系列文章的所有文章的目录 第一章&#xff1a;Qt下使用ModbusTcp通信协议进行PLC线圈/保持寄存器的读写&#xff08;32位有符号数&#xff09; 第二章&#xff1a;Qt下使用modbus-c库实现PLC线圈/保持寄存器的读写 文章目录 系列文章目录…

前端Vue3项目如何打包成Docker镜像运行

将前端Vue3项目打包成Docker镜像并运行包括几个主要步骤&#xff1a;项目打包、编写Dockerfile、构建镜像和运行容器。下面是一个基本的流程&#xff1a; 1. 项目打包 首先&#xff0c;确保你的Vue3项目可以正常运行和打包。在项目根目录下执行以下命令来打包你的Vue3项目&am…

nest.js使用nest-winston日志一

nest-winston文档 nest-winston - npm 参考&#xff1a;nestjs中winston日志模块使用 - 浮的blog - SegmentFault 思否 安装 cnpm install --save nest-winston winstoncnpm install winston-daily-rotate-file 在main.ts中 import { NestFactory } from nestjs/core; im…

【5G 接口协议】GTP-U协议介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

基础小白快速入门Python------>模块的作用和意义

模块&#xff0c; 这个词听起来是如此的高大威猛&#xff0c;以至于萌新小白见了瑟瑟发抖&#xff0c;本草履虫见了都直摇头&#xff0c;好像听上去很难的样子&#xff0c;但是但是&#xff0c;年轻人&#xff0c;请听本少年细细讲述&#xff0c;他只是看起来很难&#xff0c;实…

GO-接口

1. 接口 在Go语言中接口&#xff08;interface&#xff09;是一种类型&#xff0c;一种抽象的类型。 interface是一组method的集合&#xff0c;接口做的事情就像是定义一个协议&#xff08;规则&#xff09;&#xff0c;只要一台机器有洗衣服和甩干的功能&#xff0c;我就称它…

【go语言开发】swagger安装和使用

本文主要介绍go-swagger的安装和使用&#xff0c;首先介绍如何安装swagger&#xff0c;测试是否成功&#xff1b;然后列出常用的注释和给出使用例子&#xff1b;最后生成接口文档&#xff0c;并在浏览器上测试 文章目录 安装注释说明常用注释参考例子 文档生成格式化文档生成do…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实&#xff0c;它只是根据上文&#xff0c;猜下一个词&#xff08;的概率&#xff09;…… OpenAI 的接口名就叫【completion】&#xff0c;也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…

【C++】类的转换函数

使用场景 C中当你创建了一个类&#xff0c;你想把这个类对象转换成基本类型的函数。类对象->基本类型对象 原理 如下实例&#xff0c;设计一个分数类&#xff0c;实现分数转换成double 浮点数的转换函数。并在mian函数隐式调用。 #include<iostream> class Fractio…

Python爬虫Cookies 池的搭建

Cookies 池的搭建 很多时候&#xff0c;在爬取没有登录的情况下&#xff0c;我们也可以访问一部分页面或请求一些接口&#xff0c;因为毕竟网站本身需要做 SEO&#xff0c;不会对所有页面都设置登录限制。 但是&#xff0c;不登录直接爬取会有一些弊端&#xff0c;弊端主要有…

南京师范大学计电院数据结构课设——排序算法

1 排序算法 1.1 题目要求 编程实现希尔、快速、堆排序、归并排序算法。要求首先随机产生10000个数据存入磁盘文件&#xff0c;然后读入数据文件&#xff0c;分别采用不同的排序方法进行排序并将结果存入文件中。 1.2 算法思想描述 1.2.1 随机数生成 当需要生成一系列随机数…

windows 11 前后端项目部署

目录 1.准备环境&#xff1a; 2.安装jdk 测试&#xff1a;winr 输入cmd 3.安装tomcat 4.安装mysql 远程导入数据&#xff1a; 外部后台访问&#xff1a;192.168.232.1:8080/crm/sys/loginAction.action?usernamezs&password123 5.安装nginx 前后端部署&#xff1…

qsort函数的模拟实现(冒泡排序模拟)

冒泡排序&#xff1a; 从第一个元素开始&#xff0c;依次比较相邻的两个元素&#xff0c;如果顺序不对就交换它们。 经过一轮遍历后&#xff0c;最大&#xff08;或最小&#xff09;的元素会排在最后。 重复进行上述步骤&#xff0c;直到没有任何元素需要交换&#xff0c;即…

爬虫入门到精通_实战篇8(分析Ajax请求并抓取今日头条美食美图)_界面上抓取Ajax方式

1 目标 目标&#xff1a; 抓取今日头条美食美图&#xff0c;如下&#xff1a; 一些网页直接请求得到的HTML代码并没有在网页中看到的内容&#xff0c;因为一些信息是通过Ajax加载&#xff0c;并通过js渲染生成的&#xff0c;这时就需要通过分析网页的请求来获取想要爬取的内容…

CSS 盒子模型(box model)

概念 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;外边距(margin)&#xff0c;边框(border)&#xff0c;内边距(pad…

关于 HTTP 协议,你了解多少

HTTP协议 FastAPI 是建立在 HTTP 协议之上&#xff0c;所以为了更好的掌握 FastAPI。我们需要先简单的了解一下 HTTP协议 简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;遵循经典的客户端-服务器模型&#xff0c;客户端打开连接以发出请求&#xff0c;然后等…

【Go语言】Go语言中的流程控制

Go语言中的流程控制 流程控制主要用于设定计算执行的顺序&#xff0c;简历程序的逻辑结果&#xff0c;Go语言的流程控制语句与其他语言类似&#xff0c;支持如下几种流程控制语句&#xff1a; 条件语句&#xff1a;用于条件判断&#xff0c;对应的关键字有if、else和else if&a…

使用 Docker 部署 Fiora 在线聊天室平台

一、Fiora 介绍 Fiora 简介 Fiora 是一款开源免费的在线聊天系统。 GitHub&#xff1a;https://github.com/yinxin630/fiora Fiora 功能 注册账号并登录&#xff0c;可以长久保存你的数据加入现有群组或者创建自己的群组&#xff0c;来和大家交流和任意人私聊&#xff0c;并添…

MySQL 主从读写分离入门——基本原理以及ProxySQL的简单使用

一、读写分离工作原理 读写分离的工作原理&#xff1a;在大型网站业务中&#xff0c;当单台数据库无法满足并发需求时&#xff0c;通过主从同步方式同步数据。设置一台主服务器负责增、删、改&#xff0c;多台从服务器负责查询&#xff0c;从服务器从主服务器同步数据以保持一…