【快速入手 Python 基础 | 第1章】:数据存储与运算

【快速入手 Python 基础 | 第1章】:数据存储与运算

Python 基础知识点概览

🎬 博主名称:超级苦力怕

🔥 个人专栏:《Python 基础》

🚀 每一次思考都是突破的前奏,每一次复盘都是精进的开始!


前言

本文主要内容:Python 基础知识点,包含字面量、变量、标识符、数据类型、字符串、键盘录入、运算符等知识点。

1. 前置知识点

1.1 注释

程序添加注释,可以用来解释程序某些部分的作用和功能,提高程序可读性,分为单行注释多行注释

单行注释:# 注释内容

# 这是注释,实际运行不显示print("正常内容")

多行注释:“”" 注释 “”"

""" 这是多行注释 在三引号内的内容,可以包括换行、单引号、双引号、无需转义(下面会讲解转义) """print("正常内容")

2. 字面量

2.1 字面量定义

字面量:程序中直接写出的常量值,如数字、字符串、布尔值等

在编程中,我们可以看到 5,-5 这样的数字,0.3,0.5 这样的小数,“Python 从入门到入土” 这样的文字,像这样固定的值,都叫做字面量

2.2 字面量类型(常见基础数据类型)

类型描述字面量示例 / 说明
整数(int)整数数字1018-50
浮点数(float)小数3.14-0.52.0
布尔(bool)表达现实生活中的逻辑,真或假TrueFalse
字符串(str)描述文本的一种数据类型"人生苦短,我用Python"'文本'
空值(NoneType)表示空或无值,仅包含一个值None
拓展:布尔值可以参与算术运算(True=1, False=0),但这种用法会降低代码可读性,容易引起混淆。建议布尔值仅用于逻辑判断,不参与算术运算。

2.3 代码示例

# 字面量的写法print(100)# 整数(int)print(3.14)# 浮点数/小数(float)print(True)# 布尔(bool)print(False)# 布尔(bool)print("Hello Python")# 字符串(str)print("----------------")# 字符串(str)print(None)# 空值(NoneType)# 布尔类型本质也是整数类型(True = 1; False = 0)print(True+1)# 2print(False-1)# -1

3. 变量

3.1 变量定义

变量:可以理解为存储数据的“盒子”,每个盒子有一个名字(变量名),里面可以放一个数据(变量值)。当需要修改数据时,只需要更换盒子里的内容即可。

定义格式:变量名 = 变量值num = 1114.1

作用:输出打印、参与运算、记录数据

注意:变量是存储数据的容器,而不是被存储的数据。一个变量只能存储一个值,变量必须赋值才能使用。Python 是动态类型语言,变量不需要声明类型,同一个变量可以先后指向不同类型的对象。

3.2 代码示例

num =1114.1print(num)# 1114.1 num = num +1print(num)# 1115.1 num ="OK"print(num)# Ok num =Trueprint(num)# True num_two =100print(num+num_two)# 101 (num 此时为 True,参与运算为 1)

4. 标识符

4.1 标识符定义

标识符:是程序员在代码中为变量、函数、类等元素起的名字

命名规则:

  • 只能包含字母( a-z、A-Z )、数字( 0-9 )、下划线( _ )
  • 不能以数字开头
  • 不能使用关键字:True、False、None、and、or、if 等,详细查阅地址
  • 严格区分大小写,age、Age、AGE 是三个变量

命名规范

  • 见名知意:name、age、color
  • 多个部分使用下划线连接:update_time、my_name
  • 变量英文字母全小写,类的首字母大写
PEP8:Python社区的核心技术文档和标准化机制,为 Python 的 代码风格指南

5. 数据类型

实际上常见的字面量,就是常见的数据类型

5.1 查看数据实际类型

type( ):获取变量中存储的数据的类型,具体语法:type(要查看类型的数据)
isinstance( ):检查数据是否属于指定类型,具体语法:isinstance(数据,类型)

5.2 代码示例

print("Hello")print(type("Hello"))# <class 'str'>print(type(10))# <class 'int'>print(type(3.14))# <class 'float'>print(type(True))# <class 'bool'>print(type(False))# <class 'bool'>print(type(None))# <class 'NoneType'># isinstance() 的使用示例print(isinstance("Hello",str))# Trueprint(isinstance(10,int))# Trueprint(isinstance(3.14,float))# Trueprint(isinstance(True,bool))# Trueprint(isinstance("10",int))# False

6. 字符串

在编程中,一个字母、一个标点符号、一个文字都是一个字符,例如 “你” 和 “好” 两个字符,可以串起来,组成"你好",像这样由多个字符组成一条串,就叫做字符串。

6.1 字符串定义

字符串在Python中有三种定义方式,分别为双引号定义单引号定义三引号定义(多行字符串),效果如下。

# 双引号定义 s1 ="Hello"# 单引号定义 s2 ='Python'# 三引号定义(多行字符串) s3 =""" 尊敬的客户: 感谢您选择我们公司的产品。 我们将会为您竭诚的服务。 祝好~ """

拓充:转义字符

当我们想打印像It's这样,包含引号的内容时,它的引号会产生冲突,例如'It's good',它会将前面两个单引号看作一个字符串,这时候,就需要通过转义字符来表示特殊符号。

作用:在许多语言中表示特殊符号

常见转义字符名称作用
\'单引号表示单引号 ’
\"双引号表示双引号 "
\n换行符开始新的一行(换行)
\t 制表符增加缩进,缩进一个制表符(tab)的大小
\\反斜杠表示一个反斜杠字符

前后对比效果如下

# 引号冲突,将'It'看作字符串,会导致语法错误# print('It's Good)# 解决方法1:转义符print('It\'s Good')# It's Good# 解决方法2:使用单双引号print("It's Good")

6.2 字符串拼接

很多时候,我们需要将多个字符串使用 + 拼接起来,方式分为直接书写加号拼接字符串变量拼接,如果想让字符串与非字符串拼接,我们需要类型转换

拓展:直接书写可以自动连接,这是因为 Python 允许将多个字符串字面量并置,会自动连接成一个字符串直接书写自动连接是 Python 的语法特性,适用于字符串字面量,但不适用于变量。例如 “超级” “苦力怕” 会自动合并,但 s1 + s2 必须用加号。
# 多个字符串字面量直接写 slogan ="超级""苦力怕"# 超级苦力怕print(slogan)# +号拼接 slogan ="超级"+"苦力怕"# 超级苦力怕print(slogan)# 字符串变量拼接 s1 ="人生苦短" s2 ="我用Python"print("变量拼接: "+ s1 +", "+ s2)# 变量拼接: 人生苦短, 我用Python# 类型转换 s3 ="小明" s4 =8# str() 可以将数字转换为字符串print(s3 +"今年"+str(s4)+"岁")# 小明今年8岁

6.3 字符串格式化

在 Python 中,我们在拼接字符串的时候,可以通过类型转换,如 str(17),将17转换为字符串从而进行拼接,但这样太麻烦了,我们可以通过 字符串格式化 的方式,完成字符串和变量的快速拼接。

方式一:通过 % 进行格式化

其中 % 代表占位,s 为字符串首字母,表示要将变量转为字符串放入占位的位置

注意:前面有多少个占位符,后面就要有多少个变量(或数据)除了 %s,其他格式如%d用于整数,%f用于浮点数
s1 ="苦力怕" s2 ="苦" s3 ="力怕"print("%s要爆炸了"% s1)#苦力怕要爆炸了print("%s 姓%s 名%s"%(s1,s2,s3))#苦力怕 姓苦 名力怕

方式二:通过 f"{}"快速完成格式化
可以通过 f"内容{变量/表达式}" 的形式快速完成格式化

s1 ="苦力怕" s2 ="苦" s3 ="力怕"print(f"{s2+s3}要爆炸了")#苦力怕要爆炸了print(f"{s1} 姓{s2} 名{s3}")#苦力怕 姓苦 名力怕

7. 键盘录入

在上述的学习中,我们的数据都是提前写死的,如果我们可以每一次都可以通过键盘输入不同的数据,那么结果会灵活很多,这就用到了 键盘录入

7.1 录入方法

input :获取键盘录入的数据,具体用法为: s = input(提示信息)

当执行 input 语句时,控制台会终止,点击回车,会将你在终止期间输入的数据存储到变量中。

拓展:无论你输入的是什么数据,返回的永远是字符串类型,如果需要数字,需要进行类型转换,如float()

7.2 代码示例

当你分别输入姓名、年龄后,才会执行第三条语句

name =input("你的姓名:") age =input("你的年龄:")print(f"姓名为{name},年龄为{age}")

7.3 类型转换(拓充)

在上述字符串的时候,简单提到了类型转换,实际上在Python中,字符转换只需要类型(...),就会将括号内的内容转化为对应类型。

  • 将其他类型转为int类型:int(..)
  • 将其他类型转为str类型:str(..)
  • 将其他类型转为float类型:float(..)
  • 将其他类型转为bool类型:bool(..)
# 类型转换示例 num_str ="123" num_int =int(num_str)# 字符串转整数 num_float =float(num_str)# 字符串转浮点数print(num_int,type(num_int))# 123 <class 'int'>print(num_float,type(num_float))# 123.0 <class 'float'># 布尔类型转换print(bool(0))# Falseprint(bool(1))# Trueprint(bool(""))# Falseprint(bool("abc"))# True

8. 运算符

我们在小学的时候,就学过加减乘除,这就是最基础的运算符,在程序中,运算符大体分为 算数运算符赋值运算符比较运算符逻辑运算符四种。

8.1 算术运算符

算术运算符,即表示运算的符号,他们作用域一个或多个操作数上,产生一个计算结果,常见运算符如下

运算符描述举例说明
+加法( 1 + 5 ) : 1 加上 5
-减法( 8 - 3 ) : 8 减去 3
*乘法( 3 * 8 ) : 3 乘以 8
/除法( 10 / 5 ) : 10 除以 5,除法结果是小数
//整除( 10 // 3 ) : 10 整除 3,整除结果为整数
%取余/求模( 10 % 3 ) : 10 模于 3,结果为 1 (10 除 3 取余数)
**幂指数( 10 ** 3 ) : 10 的 3 次方

代码示例

算术运算的优先级:与数学一样,括号() > 幂 ** > 乘除相关* / // % > 加减+ -
# 算术运算符:+ - * / // % **print("10 + 4 =",10+4)# 加print("10 - 4 =",10-4)# 减print("10 * 4 =",10*4)# 乘print("10 / 4 =",10/4)# 除 → 2.5print("10 // 4 =",10//4)# 整除(结果为整数) → 2print("10 % 4 =",10%4)# 取余(求模) → 2print("10 ** 4 =",10**4)# 幂指数,10的4次方 → 10000

拓展知识点:精度损失

计算机使用二进制存储数据,而某些十进制小数(如 0.1)无法用二进制精确表示,导致计算结果出现微小误差。这是计算机科学的普遍现象,不是 Python 的 bug。

8.2 赋值运算符

赋值运算符,即表示赋值的符号,将右边的值赋给左边的变量,常见运算符如下

运算符描述实例
=赋值运算符把 = 号右边的结果赋值给左边的变量,如 num = 1+2,结果num的值为3
+=加法赋值运算符num += 2 等效于 num = num + 2
-=减法赋值运算符num -= 2 等效于 num = num - 2
*=乘法赋值运算符num *= 2 等效于 num = num * 2
/=除法赋值运算符num /= 2 等效于 num = num / 2
%=取模赋值运算符num %= 2 等效于 num = num % 2
**=幂赋值运算符num **= 2 等效于 num = num ** 2

代码示例

num =10 num +=10# num = num + 10print("num += 10 后,num = ", num)# 20 num =10 num -=10# num = num - 10print("num -= 10 后,num = ", num)# 0 num =10 num *=10# num = num * 10print("num *= 10 后,num = ", num)# 100 num =10 num /=10# num = num / 10print("num /= 10 后,num = ", num)# 1.0 num =10 num //=10# num = num // 10print("num //= 10 后,num = ", num)# 1 num =10 num %=3# num = num % 3print("num %= 3 后,num = ", num)# 1 num =10 num **=3# num = num ** 3print("num **= 3 后,num = ", num)# 1000

8.3 比较运算符

比较运算符,即表示比较的符号,常用于比较两个值之间的关系,返回一个布尔类型结果(True 代表关系成立,False 代表关系不成立),常见运算符如下

运算符描述实例
==等于a == b 判断a是否等于b
!=不等于a != b 判断a是否不等于b
>大于a > b 判断a是否大于b
>=大于等于a >= b 判断a是否大于等于b
<小于a < b 判断a是否小于b
<=小于等于a <= b 判断a是否小于等于b

代码演示

# 比较运算符: == != > >= < <=print("100 == 100 吗:",100==100)# Trueprint("'100' == '100' 吗:","100"=="100")# Trueprint("100 != 100 吗:",100!=100)# Falseprint("100 < 100 吗:",100<100)# Falseprint("100 <= 100 吗:",100<=100)# Trueprint("100 > 100 吗:",100>100)# Falseprint("100 >= 100 吗:",100>=100)# True

8.4 逻辑运算符

逻辑运算符,即表示逻辑的符号,常用于判断多个条件,返回一个最终结果(True 或 False)

运算符描述实例
and逻辑与(并且)同时成立才是符合条件的(左右两边都为True,结果才为True)
or逻辑或(或者)只要有一个符合要求的即可(只要左右两边有一个为True,结果就为True)
not逻辑非(取反)取反操作,True变为False,False变为True

代码示例

# 案例1: 键盘输入一个整数,判断这个数字是否在10~20之间 n =int(input("请输入一个整数:"))# and连接的条件是并且的关系,两个条件同时成立(True),结果才是True;否则,就是Falseprint(f"{n}在10~20之间:", n >=10and n <=20)# 第二种比较方式,等价于 10 <= n and n <= 20print(f"{n}在10~20之间:",10<= n <=20)# 案例2: 键盘输入一个整数,判断这个数字是否不在10~20之间 n =int(input("请输入一个整数:"))# or连接的条件,是或者的关系,只要其中有一个成立(True),结果就是True;全部不成立,结果才是Falseprint(f"{n}不在10~20之间:", n <10or n >20)

结语

本文带你认识了Python中的字面量、变量、常见数据类型,掌握了字符串的三种定义和格式化方法,学会了使用算术、赋值、比较、逻辑运算符。
  • 如果本文对你有帮助:欢迎点赞、收藏,让更多正在学 Python 的同学看到。
  • 遇到问题或有不同理解:可以在评论区留言,一起讨论、互相学习。
  • 想系统看更多内容:可以关注专栏《Python 基础》,一起把基础打牢。

Read more

基于C++构建DeepSeek大模型推理SDK:从架构设计到工程落地

基于C++构建DeepSeek大模型推理SDK:从架构设计到工程落地

这里写目录标题 * 前言 * 一、 云端环境配置与鉴权机制 * 二、 C++ SDK 核心数据结构设计 * 1. 消息与配置实体 * 2. 模型信息与会话管理 * 三、 抽象接口层设计:策略模式的应用 * 四、 DeepSeek 适配器实现 * 1. 初始化逻辑 * 2. 信息查询接口 * 五、 单元测试与质量保证 * 1. 测试环境构建 * 2. 日志系统 * 六、 CMake 构建系统配置 * 1. 依赖管理 * 2. 编译目标与链接 * 七、 编译与调试过程 前言 在高性能计算与大模型(LLM)应用开发的浪潮中,C++凭借其卓越的内存管理能力和运行时效率,成为了构建底层推理SDK的首选语言。本文将深入剖析如何从零开始,设计并实现一个能够调用DeepSeek模型的C++ SDK。全通过程涵盖了云端鉴权、面向对象架构设计、多态接口封装、

By Ne0inhk

RC6对称加密算法实现与C++实战详解

本文还有配套的精品资源,点击获取 简介:RC6是由Rivest、Shamir和Adleman提出的先进对称密钥加密算法,作为RC5的增强版本参与AES竞选,具有高效性与强安全性。该算法采用四个密钥字及可变寄存器P、Q,通过字节混合、字操作、字节选择和多轮轮函数实现高混淆与扩散。本文介绍在C++环境下实现RC6的密钥扩展、32位数据块处理、可配置轮数机制及字节序兼容等关键技术,并结合Visual Studio与MFC开发加密解密图形化应用。配套PDF文档与源码包提供了算法详解与实战示例,助力开发者掌握RC6在实际环境中的安全实现与应用。 RC6加密算法深度解析:从数学原理到工程实践 在当今信息爆炸的时代,数据安全已成为数字世界的生命线。无论是银行转账、云端存储还是即时通讯,背后都离不开密码学的默默守护。而在众多对称加密算法中,RC6无疑是一颗璀璨却略显低调的明珠。它曾作为AES(高级加密标准)评选中的五强候选者之一,凭借其精巧的设计和卓越的性能赢得了学术界与工业界的广泛赞誉。 但你是否想过,为什么一个诞生于1998年的算法至今仍在某些高安全性场景中被提及?它的核心机制到底有何独

By Ne0inhk
【C++ Qt】网络编程(QUdpSocket、QTcpSocket、Http)

【C++ Qt】网络编程(QUdpSocket、QTcpSocket、Http)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论 : 本章将提到Qt中的网络部分,在看这篇文章之前需要有一定的网络基础也就是TCP/HTTP、本篇文章主要讲到的是Qt中基础的Udp、Tcp、Http的使用方法,并附有了多个小demo方便实操练习,并且其中还在每章最后进行了小总结回顾重要接口和函数方便回顾。 ———————— 早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。 网络编程主要依赖于操作系统提供的Socket API。需要注意的是,C++标准库本身并未封装网络编程相关的API。 关于Qt网络编程的几个要点: 1. 网络应用开发本质上是编写应用层代码,需要传输层协议(如TCP/UDP)的支持 2. 为此,Qt提供了两套专门的网络编程API(QUDPSocket和QTcpSocket) 3. 使用Qt网络编程API时,需先在.pro文件中添加network模块 4. 之前学习的Qt控件和核心功能都属于QtCore模块(默认已包含) 为什么Qt要划分出这些模块呢? Qt 本身是一个非常庞

By Ne0inhk
【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通

【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通

各位读者大佬好,我是落羽!一个坚持不断学习进步的学生。 如果您觉得我的文章还不错,欢迎多多互三分享交流,一起学习进步! 也欢迎关注我的blog主页:落羽的落羽 文章目录 * 一、调试前的预备知识 * 二、gdb/cgdb的使用 * 1. 启动,查看代码 * 2. 基础调试命令 * 3. 监视变量相关命令 * 4. 设置条件断点 一、调试前的预备知识 程序发布的方式有两种,debug模式和release模式。 * debug模式:生成的可执行程序中会包含程序的调试信息,便于程序员进行调试代码。 * release模式:会剥离或不生成这些调试信息。这使得文件更小,但也意味着调试器几乎无法工作,release版本程序无法进行调试。 Linux的gcc/g++,按照我们之前的写法gcc -o $@ $^,默认生成的是release版本的程序,是无法进行调试的。要在命令后加-g选项,指定以debug方式发布,debug模式下的程序我们才能进行调试。 gcc -o $@ $^ -g 二、gdb/cgdb的使用

By Ne0inhk