将理论,代码,图示三合一。
day1计算机基础结构
硬件
1944年,美籍匈牙利数学家冯·诺依曼提出计算机基本结构。
五大组成部分:运算器、控制器、存储器、输入设备、输出设备。
– 运算器:按照程序中的指令,对数据进行加工处理。
– 控制器:根据程序需求,指挥计算机的各个部件协调工作。
通常将运算器和控制器集成在中央处理器(CPU)中。
– 存储器:保存各类程序的数据信息。
内存RAM – 容量小,速度快,临时存储数据
硬盘HDD – 容量大,速度慢,永久存储数据
输入设备:外界向计算机传送信息的装置。
例如:鼠标、键盘、扫描仪…
输出设备:计算机向外界传送信息的装置。
例如:显示器、音响、打印机…
软件
操作系统:
– 管理和控制计算机软件与硬件资源的程序。
– 隔离不同硬件的差异,使软件开发简单化。
– Windows,Linux,Unix。
应用软件:为了某种特定的用途而被开发的软件。
软件:程序 + 文档。
– 程序是一组计算机能识别和执行的指令集合。
Python 简介
Python 定义
是一个免费、开源、跨平台、动态、面向对象的编程语言。
Python程序的执行方式
交互式
在命令行输入指令,回车即可得到结果。
-
打开终端
-
进入交互式:python3
-
编写代码:print(“hello world”)
-
离开交互式:exit()
文件式
将指令编写到.py文件,可以重复运行程序。
-
编写文件。
-
打开终端
-
进入程序所在目录:cd 目录
-
执行程序: python3 文件名
Linux常用命令
1. pwd:查看当前工作目录的路径
2. ls:查看指定目录的内容或文件信息
3. cd:改变工作目录(进入到某个目录)
4. touch :创建文件
练习:
- 在指定目录创建python文件.
–目录:/home/tarena/month01
–文件名:exercise01.py
-
在文件中写入:print(“你好,世界!”)
-
运行python程序
执行过程
计算机只能识别机器码(1010),不能识别源代码(python)。
-
由源代码转变成机器码的过程分成两类:编译和解释。
-
编译:在程序运行之前,通过编译器将源代码变成机器码,例如:C语言。
– 优点:运行速度快
– 缺点:开发效率低,不能跨平台。
- 解释:在程序运行之时,通过解释器对程序逐行翻译,然后执行。例如Javascript
– 优点:开发效率高,可以跨平台;
– 缺点:运行速度慢。
- python是解释型语言,但为了提高运行速度,使用了一种编译的方法。编译之后得到pyc文件,存储了字节码(特定于Python的表现形式,不是机器码)。
源代码 – 编译 --> 字节码 – 解释 --> 机器码
|————1次———|
解释器类型
-
CPython(C语言开发)
-
Jython (java开发)
-
IronPython (.net开发)
数据基本运算
基础知识
pycharm常用快捷键
-
移动到本行开头:home键
-
移动到本行末尾:end键盘
-
注释代码:ctrl + /
-
复制行:ctrl +d
-
选择列:鼠标左键 + alt
-
移动行:shift + alt + 上下箭头
-
智能提示:ctrl + space
-
代码格式化:ctrl+alt+l
注释
给人看的,通常是对代码的描述信息。
-
单行注释:以#号开头。
-
多行注释:三引号开头,三引号结尾。
函数
表示一个功能,函数定义者是提供功能的人,函数调用者是使用功能的人。
例如:
-
print(数据) 作用:将括号中的内容显示在控制台中
-
变量 = input(“需要显示的内容”) 作用:将用户输入的内容赋值给变量
""" 汇率转换器
""" #1. 获取数据
str_usd = input("请输入美元:")
int_usd = int(str_usd)
#2. 逻辑处理
result = int_usd * 6.9
#3. 显示结果
print(result) # 程序是改出来的
# 英文不好用有道
# 程序不是自上而下编写的
# 一行代码往往是从右向左写的
day2变量
-
定义:关联一个对象的标识符。
-
命名:必须是字母或下划线开头,后跟字母、数字、下划线。
不能使用关键字(蓝色),否则发生语法错误:SyntaxError: invalid syntax。
-
建议命名:字母小写,多个单词以下划线隔开。
class_name
-
赋值:创建一个变量或改变一个变量关联的数据。
-
语法:变量名 = 数据
变量名1 = 变量名2 = 数据变量名1, 变量名2, = 数据1, 数据2
变量内存
""" 变量:在内存中存储数据
"""
# 语法:
# 变量名称 = 对象
# 例如:
name = "张无忌"
print(name)
# 语义:内存图
# 变量名:真实内存地址的别名
# 见名知意
# 赋值号:将右边对象的地址复制给左边内存空间。 name = "赵敏"
a01 = a02 = "周芷若"
b01, b02 = "苏大强", "苏明玉"
class_name = "1905"
如下图:
输入输出
"""
print
input
""" # 字面意思:输入功能
# 作用:从终端中获取输入的信息,存到程序(变量)中。
name = input("请输入姓名:")
# 字面意思:打印功能
# 作用:将括号中的内容,显示到终端。
print(name)
print() 加号左右的类型要相同。
del 语句
- 语法:
del 变量名1, 变量名2
- 作用:
用于删除变量,同时解除与对象的关联.如果可能则释放对象。
- 自动化内存管理的引用计数:
每个对象记录被变量绑定(引用)的数量,当为0时被销毁。
""" del
"""
a = "悟空"
b = a
c = a
# 删除变量a,b,不释放对象"悟空"
del a,b
# 由于变量c不再引用对象"悟空",而悟空的引用计数为0,所以被标记为可回收。
c = None
核心数据类型
-
在python中变量没有类型,但关联的对象有类型。
-
通过type函数可查看。
空值对象 None
-
表示不存在的特殊对象。
-
作用:占位和解除与对象的关联。
整形int
- 表示整数,包含正数、负数、0。
如: -5, 100, 0
- 字面值:
十进制:5
二进制:0b开头,后跟1或者1
八进制:0o开头,后跟0~7
十六进制:0x开头,后跟09,AF,a~f
浮点型float
-
表示小数,包含正数、负数,0.0)。
-
字面值:
小数:1.0 2.5
科学计数法:e/E (正负号) 指数
1.23e-2 (等同于0.0123)1.23456e5(等同于123456.0)
""" 核心数据类型
"""
# 1. None
a01 = "苏大强"
# 解除变量与数据的绑定关系
a01 = None
# 使用Non占位
sex = None # 2. 整形int
# 十进制
num01 = 20
# 二进制:0 1 10 11 100 print(0b10)# 2
# 八进制:0 1 ..7 10 11 ..
print(0o10)# 8
# 十六进制:0 -- 9 a(10) - f(15)
print(0x10)# 16 # 3. 浮点数float
print(1.5)
# 科学计数法:表示过小或过大的值很明确
# 1.23e-25
print(0.000000000000000000000000123) # 4. 字符串str
print("1.5")
a = 10
print(a)# 打印变量 10
print("a")# 打印字符串 a
字符串str
是用来记录文本信息(文字信息)。
字面值:双引号
复数complex
由实部和虚部组成的数字。
虚部是以j或J结尾。
字面值: 1j 1+1j 1-1j
布尔bool
用来表示真和假的类型
True 表示真(条件满足或成立),本质是1
False 表示假(条件不满足或不成立),本质是0
数据类型转换
-
转换为整形: int(数据)
-
转换为浮点型:float(数据)
-
转换为字符串:str(数据)
-
转换为布尔:bool(数据)
结果为False:bool(0) bool(0.0) bool(None)
-
混合类型自动升级:
1 + 2.14 返回的结果是 3.14
1 + 3.0 返回结果是: 4.0
运算符
算术运算符
- 加法
- 减法
- 乘法
/ 除法:结果为浮点数
// 地板除:除的结果去掉小数部分
% 求余
** 幂运算
优先级从高到低:
()
**
* / % //
+ -
增强运算符
y += x 等同于 y = y + x
y -= x 等同于 y = y - x
y *= x 等同于 y = y * x
y /= x 等同于 y = y / x
y //= x 等同于 y = y // x
y %= x 等同于 y = y % x
y **= x 等同于 y = y ** x
""" 数据类型转换 运算符 算数运算符 增强运算符 练习:exercise03.py exercise04.py exercise05.py exercise06.py exercise07.py
"""
# 1. 数据类型转换
# int float str
str_usd = input("请输入美元:")
# 类型转换str --> int
int_usd = int(str_usd)
result = int_usd * 6.9
# str + 数值 --> str + str(数值)
# result = str(result)
# print("结果是:"+result)
print("结果是:"+str(result)) # 2. 算数运算符
# print(1+2)
# print(1-2.5) # 地板除(保留整数)
print(5 // 2)# 商2
# 余
print(5 % 2)# 余1
# 除
print(5 / 2)# 2.5
# 获取整数的个位
print(27 % 10 )# 7
# 幂运算
# 5的2次方:5*5
print(5**2)
# 5的3次方:5*5*5
print(5**3) # 3. 增强运算符
# number01 = 200
# print(number01 + 1)
# print(number01)# 200 number01 = 200
# 变量加上另外一个数,再赋值给自身
# number01 = number01 + 1
# 累加(在自身基础上增加)
number01 += 1
print(number01)# 201
比较运算符
< 小于
<= 小于等于
大于
= 大于等于
== 等于
!= 不等于
返回布尔类型的值
比较运算的数学表示方式:0 <= x <= 100
逻辑运算符
与and
表示并且的关系,一假俱假。
示例:
True and True # TrueTrue and False # FalseFalse and True # False
False and False # False
或or
表示或者的关系,一真俱真
示例:
True or True # True
True or False # True
False or True # True
False or False # False
非 not
表示取反
例如:
not True # 返回False
not False # 返回True
短路运算
一但结果确定,后面的语句将不再执行。
""" bool 运算符 比较运算符 > < >= <= 等于== 不等于!= 结果是:bool类型 逻辑运算符:判断两个bool值关系 与 或 非
"""
# 1. bool 类型
# 取值:(真,对的,满足条件)True (假,错的,不满足条件)False
# 命题:带有判断性的陈述句。
# 例如:我是个男人。
# 1 > 2 --> False
print(1 > 2) # 2. 逻辑运算符
# -- 与:一假俱假,表示并且(都得满足)的关系
print(True and True) # True 都得满足条件,结论才满足条件。print(False and True) # False
print(True and False) # False
print(False and False) # False # -- 或:一真俱真,表示或者(一个满足就行)的关系
print(True or True) # True print(False or True) # True
print(True or False) # True
print(False or False) # False # -- 非:取反
print(not True) # 练习:判断年份是否为闰年。
# 闰年True:年份能被4整除,但是不能被100整除。
# 能被400整除
# 平年False
year = int(input("请输入年份:"))
result = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(result)
身份运算符
语法:x is yx is not y
作用:
is 用于判断两个对象是否是同一个对象,是时返回True,否则返回False。
is not 的作用与is相反
""" 身份运算符
""" a = 800
b = 1000
# id函数,可以获取变量存储的对象地址。
print(id(a))
print(id(b))
# flase
print(a is b) # is 的本质就是通过id函数进行判断的 c = a
print(id(c))
print(c is a) d = 1000
print(d is b)
优先级
高到低:
算数运算符
比较运算符
快捷运算符
身份运算符
逻辑运算符
语句
行
-
物理行:程序员编写代码的行。
-
逻辑行:python解释器需要执行的指令。
-
建议一个逻辑行在一个物理行上。
-
如果一个物理行中使用多个逻辑行,需要使用分号;隔开。
-
如果逻辑行过长,可以使用隐式换行或显式换行。
隐式换行:所有括号的内容换行,称为隐式换行
括号包括: () [] {} 三种
显式换行:通过折行符 \ (反斜杠)换行,必须放在一行的末尾,目的是告诉解释器,下一行也是本行的语句。
""" 行
""" # 三个物理行,三个逻辑行
a = 1
b = a + 2
c = a + b # 一个物理行,三个逻辑行(不建议)
a = 1;b = a + 2;c = a + b # 一个物理行,一个逻辑行
d = 1 + 2 +3 + 4
# 二个物理行,一个逻辑行
# \ 表示折行符
d = 1 + 2 \ +3 + 4 # 四个物理行,一个逻辑行
d = (1 + 2 + 3 + 4)
pass 语句
通常用来填充语法空白。
选择****语句
If elif else 语句
-
作用:
让程序根据条件选择性的执行语句。
-
语法:
if 条件1:
语句块1
elif 条件2:
语句块2
else:
语句块3
-
说明:
elif 子句可以有0个或多个。
else 子句可以有0个或1个,且只能放在if语句的最后。
"""
选择语句
练习:
exercise01.py
exercise02.py exercise03.py exercise04.py exercise05.py exercise06.py
""" sex = input("请输入性别:")
if sex == "男": print("您好,先生!")
elif sex == "女": print("您好,女士!")
else: print("性别未知") print("后续逻辑") # 调试:让程序中断,逐语句执行。
# -- 目的:审查程序运行时变量取值# 审查程序运行的流程
# -- 步骤:# 1. 加断点(可能出错的行)
# 2. 调试运行 Shift+F9
# 3. 执行一行 F8
# 4. 停止 Ctrl +F2
if 语句的真值表达式
if 100:
print("真值")
等同于
if bool(100):
print("真值")
""" 真值表达式 if 数据: 语句 本质就是使用bool函数操作数据 条件表达式 练习:exercise07.py 17:10""" # 1. 真值表达式
if "a": # if bool("a"): print("真值") str_input = input("请输入:")
if str_input: print("输入的字符串不是空的")
# 2. 条件表达式:有选择性的为变量进行赋值
# sex = None
# if input("请输入性别:") == "男":
# sex = 1
# else:
# sex = 0
# print(sex)
sex = 1 if input("请输入性别:") == "男" else 0
print(sex)
条件表达式
语法:变量 = 结果1 if 条件 else 结果2
作用:根据条件(True/False) 来决定返回结果1还是结果2。
循环语句
while语句
- 作用:
可以让一段代码满足条件,重复执行。
- 语法:
while 条件:
满足条件执行的语句else:不满足条件执行的语句
-
说明:
else子句可以省略。
在循环体内用break终止循环时,else子句不执行。
""" 循环语句 while 条件: 循环体 练习:exercise08.py
""" # 死循环:循环条件永远是满足的。
while True: usd = int(input("请输入美元:")) print(usd * 6.9) if input("输入q键退出:"): break # 退出循环体
""" 循环语句 while 条件: 循环体 练习:exercise08.py
""" # 死循环:循环条件永远是满足的。
while True: usd = int(input("请输入美元:")) print(usd * 6.9) if input("输入q键退出:") == 'q': break # 退出循环体
for 语句
-
作用:
用来遍历可迭代对象的数据元素。
可迭代对象是指能依次获取数据元素的对象,例如:容器类型。
-
语法:
for 变量列表 in 可迭代对象:
语句块1
else:
语句块2
-
说明:
else子句可以省略。
在循环体内用break终止循环时,else子句不执行。
""" for: 适合执行预定次数。 while:适合根据条件循环执行。 练习:exercise05.py exercise06.py exercise07.py""" # for 变量 in 可迭代对象:
# 循环体 str01 = "我叫苏大强!" # item 存储的是字符串中每个字符的地址
for item in str01: print(id(item)) # 整数生成器: range(开始值,结束值,间隔)
# for + range : 更善于执行预定次数。
for item in range(5):#01234 print(item) # 需求:折纸10次
thickness = 0.0001
for item in range(10): thickness*=2
print(thickness)
range 函数
-
作用:
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)。
-
语法:
range(开始点,结束点,间隔)
-
说明:
函数返回的可迭代对象可以用for取出其中的元素
返回的数字不包含结束点
开始点默认为0
间隔默认值为1
""" continue 练习:exercise08.py
"""
# 累加1--100之间,能被5整除的数字
# sum_value = 0
# for item in range(1,101):
# 满足条件则累加
# if item % 5 == 0:
# sum_value+=item
# print(sum_value) sum_value = 0
for item in range(1,101): # 不满足条件则跳过本次循环,继续下次循环。 if item % 5 != 0: continue sum_value+=item
print(sum_value)
跳转语句
break 语句
-
跳出循环体,后面的代码不再执行。
-
可以让while语句的else部分不执行。
continue 语句
跳过本次,继续下次循环。
容器类型
通用操作
数学运算符
-
+:用于拼接两个容器
-
+=:用原容器与右侧容器拼接,并重新绑定变量
-
*:重复生成容器元素
-
*=:用原容器生成重复元素, 并重新绑定变量
-
< <= > >= == !=:依次比较两个容器中元素,一但不同则返回比较结果。
成员运算符
- 语法:
数据 in 序列
数据 not in 序列
-
作用:
如果在指定的序列中找到值,返回bool类型。
索引index
-
作用:定位单个容器元素
-
语法:容器[整数]
-
说明:
正向索引从0开始,第二个索引为1,最后一个为len(s)-1。
反向索引从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)。
![[Pasted image 20241026103334.png]]
切片slice
- 作用:
定位多个容器元素。
- 语法:
容器[(开始索引):(结束索引)(:(步长))]
- 说明:
小括号()括起的部分代表可省略
结束索引不包含该位置元素
步长是切片每次获取完当前元素后移动的偏移量
内建函数
-
len(x) 返回序列的长度
-
max(x) 返回序列的最大值元素
-
min(x) 返回序列的最小值元素
-
sum(x) 返回序列中所有元素的和(元素必须是数值类型)
字符串 str
定义
由一系列字符组成的不可变序列容器,存储的是字符的编码值。
编码
-
字节byte:计算机最小存储单位,等于8 位bit.
-
字符:单个的数字,文字与符号。
-
字符集(码表):存储字符与二进制序列的对应关系。
-
编码:将字符转换为对应的二进制序列的过程。
-
解码:将二进制序列转换为对应的字符的过程。
-
编码方式:
–ASCII编码:包含英文、数字等字符,每个字符1个字节。
–GBK编码:兼容ASCII编码,包含21003个中文;英文1个字节,汉字2个字节。
–Unicode字符集:国际统一编码,旧字符集每个字符2字节,新字符集4字节。
–UTF-8编码:Unicode的存储与传输方式,英文1字节,中文3字节。
相关函数
-
ord(字符串):返回该字符串的Unicode码。
-
chr(整数):返回该整数对应的字符串。
""" str编码 练习:exercise09.py
""" # 字 --> 数
num01 = ord("a")
print(num01) # 数 --> 字
str01 = chr(97)
print(str01)
字面值
单引和双引号的区别
-
单引号内的双引号不算结束符
-
双引号内的单引号不算结束符
三引号作用
-
换行会自动转换为换行符\n
-
三引号内可以包含单引号和双引号
-
作为文档字符串
转义字符
- 改变字符的原始含义。
\’ \” \””” \n \ \t \0 空字符
- 原始字符串:取消转义。
a = r”C:\newfile\test.py”
字符串格式化
- 定义:
生成一定格式的字符串。
- 语法:
字符串%(变量)
“我的名字是%s,年龄是%s” % (name, age)
- 类型码:
%s 字符串 %d整数 %f 浮点数
""" str字面值 转义符:改变原始字符含义的特殊符号
""" name = "苏大强"
name = '苏大强' # 可见即所得
name = '''苏大强'''
name = """ 苏 大 强
"""
print(name) # 单引号内的双引号不算结束符
message = '我叫"苏大强"。'
# 双引号内的单引号不算结束符
message = "我叫'苏大强'。" # 转义符:\" \n \t \\
message = "我叫\"苏大强\"。"
message = "我叫\n苏大强。" # 换行
message = "我叫\t苏大强。" # 水平制表格tab键 url = "C:\\nltk_data\\aodels\\bmt15_eval"
# 原始字符串(没有转义符)
url = r"C:\nltk_data\aodels\bmt15_eval"
print(url) # 字符串格式化
a = "1"
b = "2"
# "请输入" + str(a) + "+" + str(b) + "=?" # 在字符串中插入变量
# 请输入1+2=?
# 字符串拼接(缺点:乱)
str01 = "请输入" + a + "+" + b + "=?" str02 = "请输入%s+%s=?" % (a, b) str03 = "请输入%s+%.1f=?" % ("1", 10.5678)
print(str03)
# 17:05
通用操作
""" 通用操作str
""" str01 = "悟空"
str02 = "八戒"
# 字符串拼接
str03 = str01 + str02
# 字符串累加str01 += str02
print(str01) # 重复生成元素
print(str02 * 3)#八戒八戒八戒
str02 *=3
print(str02)
# 依次比较两个容器中元素,一但不同则返回比较结果。
print("a悟空" > "b八戒") # 成员运算符print("我叫" in "我叫齐天大圣") # 索引
message = "我叫齐天大圣"
# 获取正数第三个字
print(message[3])
# 获取最后一个字
print(message[-1]) # 切片
print(message[0:2])# 我叫
# 开始值默认为开头
print(message[:2])# 我叫
# 结束值默认为末尾
print(message[-2:])# 大圣
print(message[:])#我叫齐天大圣 print(message[-2:-5:-1])#大天齐
print(message[::-1])# 圣大天齐叫我 print(message[1:1])# 空
print(message[3:1])# 空
print(message[-2:1])# 空
# 索引不能越界
# print(message[7])
# 切片越界不报错
print(message[1:7])# 叫齐天大圣