计算机基础结构
硬件
1944年,美籍匈牙利数学家冯·诺依曼提出计算机基本结构。
五大组成部分:运算器、控制器、存储器、输入设备、输出设备。
-- 运算器:按照程序中的指令,对数据进行加工处理。
-- 控制器:根据程序需求,指挥计算机的各个部件协调工作。
通常将运算器和控制器集成在中央处理器(CPU)中。
-- 存储器:保存各类程序的数据信息。
内存RAM -- 容量小,速度快,临时存储数据
硬盘HDD -- 容量大,速度慢,永久存储数据
输入设备:外界向计算机传送信息的装置。
例如:鼠标、键盘、扫描仪…
输出设备:计算机向外界传送信息的装置。
例如:显示器、音响、打印机…
软件
操作系统:
-- 管理和控制计算机软件与硬件资源的程序。
-- 隔离不同硬件的差异~~,使软件开发简单化。
-- Windows,Linux,Unix。
应用软件:为了某种特定的用途而被开发的软件。
软件:程序 + 文档。
-- 程序是一组计算机能识别和执行的指令集合。
-- 文档是为了便于了解程序所需的说明性资料。
Python 简介
Python 定义
是一个免费、开源、跨平台、动态、面向对象的编程语言。
# Python程序的执行方式
交互式
在命令行输入指令,回车即可得到结果。
1.打开终端
2.进入交互式:python3
3.编写代码:print(“hello world”)
4.离开交互式:exit()
文件式
将指令编写到.py文件,可以重复运行程序。
1.编写文件。
2.打开终端
3.进入程序所在目录:cd 目录
4.执行程序: python3 文件名
Linux常用命令
1.pwd:查看当前工作目录的路径
2.ls:查看指定目录的内容或文件信息
3.cd:改变工作目录(进入到某个目录)
练习:
1.在指定目录创建python文件.
--目录:/home/tarena/month01
--文件名:exercise01.py
2. 在文件中写入:print(“你好,世界!”)
3. 运行python程序
执行过程
计算机只能识别机器码(1010),不能识别源代码(python)。
1.由源代码转变成机器码的过程分成两类:编译和解释。
2.编译:在程序运行之前,通过编译器将源代码变成机器码,例如:C语言。
-- 优点:运行速度快
-- 缺点:开发效率低,不能跨平台。
3.解释:在程序运行之时,通过解释器对程序逐行翻译,然后执行。例如Javascript
-- 优点:开发效率高,可以跨平台;
-- 缺点:运行速度慢。
4.python是解释型语言,但为了提高运行速度,使用了一种编译的方法。编译之后得到pyc文件,存储了字节码(特定于Python的表现形式,不是机器码)。
源代码 -- 编译 --> 字节码 -- 解释 --> 机器码
|————1次———|
解释器类型
1.CPython(C语言开发)
2.Jython (java开发)
3.IronPython (.net开发)
数据基本运算
基础知识
pycharm常用快捷键
1.移动到本行开头:home键
2.移动到本行末尾:end键盘
3.注释代码:ctrl + /
4.复制行:ctrl +d
5.选择列:shift + alt + 鼠标左键
6.移动行:shift + alt + 上下箭头
7.智能提示:ctrl + space
8.代码格式化:ctrl+alt+l
注释
给人看的,通常是对代码的描述信息。
1.单行注释:以#号开头。
# print("x")
2.多行注释:三引号开头,三引号结尾。
"""
汇率转换器 exercise01.py
"""
函数
表示一个功能,函数定义者是提供功能的人,函数调用者是使用功能的人。
例如:
1.print(数据) 作用:将括号中的内容显示在控制台中
2.变量 = input(“需要显示的内容”) 作用:将用户输入的内容赋值给变量
"""
函数:功能
语法:
函数名(参数)
"""
# 1. 字面意思:打印(输出/显示)
# 2. 作用:将括号中的内容显示在终端中
# 3. 适用性:显示结果
# print("结果")
# 1. 字面意思:输入
# 2. 作用:将终端中录入的信息输入到程序中
# 3. 适用性:获取数据
# result = input("提示信息")
name = input("请输入姓名:")
print("你好:" + name)
"""
练习1:收银台
获取商品价格
获取购买数量
获取支付金额
显示:应该找回?元.
算法:支付金额 - 价格 × 数量
"""
commodity_price = input("请输入商品价格:")
buy_count = input("请输入购买数量:")
money = input("请输入金额:")
result = float(money) - float(commodity_price) * int(buy_count)
print("应该找回" + str(result) + "元.")
变量
1.定义:关联一个对象的标识符。
2.命名:必须是字母或下划线开头,后跟字母、数字、下划线。
不能使用关键字(蓝色),否则发生语法错误:SyntaxError: invalid syntax。
3.建议命名:字母小写,多个单词以下划线隔开。
class_name
4.赋值:创建一个变量或改变一个变量关联的数据。
5.语法:变量名 = 数据
变量名1 = 变量名2 = 数据
变量名1, 变量名2, = 数据1, 数据2
"""
变量
程序运行在哪里? --> 内存
程序在处理什么? --> 数据
核心价值:在内存中操作数据
语法:
名称 = 数据
名称1,名称2 = 数据1, 数据2
名称1 = 名称2 = 数据1
练习:exercise01
"""
# 赋值号= : 将右边给到左边
score = 100
score1, score2 = 95, 96
name1 = name2 = "悟空"
"""
画出下列代码内存图:
"""
data01 = "苏大强"
data02 = data01
data01 = "大强"
print(data02)# ?
del 语句
1.语法:
del 变量名1, 变量名2
2.作用:
用于删除变量,同时解除与对象的关联.如果可能则释放对象。
3.自动化内存管理的引用计数:
每个对象记录被变量绑定(引用)的数量,当为0时被销毁。
"""
del
引用计数
练习:exercise02
"""
data01 = 500
data02 = data01
data03 = data02
"""
画出下列代码内存图
"""
name02 = name01 = "八戒"
name03 = name02
del name01
name03 = name02 = "悟空"
核心数据类型
1.在python中变量没有类型,但关联的对象有类型。
2.通过type函数可查看。
空值对象 None
1.表示不存在的特殊对象。
2.作用:占位和解除与对象的关联。
# 1. 空None类型
# -- 占位
name = None
# -- 解除与对象的关联
score = 100
score = None
整形int
1.表示整数,包含正数、负数、0。
如: -5, 100, 0
2.字面值:
十进制:5
二进制:0b开头,后跟1或者1
八进制:0o开头,后跟0~7
十六进制:0x开头,后跟0~9,A~F,a~f
# 2. 整形(整数)int类型
# -- 十进制:逢十进一 0 1 2 3 4 ..9 进位 10
data01 = 10
# -- 二进制:逢二进一 0 1 进位 10 11 100 101 110
data02 = 0b10
# -- 八进制:逢八进一 0 1 2 ...7 进位 10 11
data03 = 0o10
# -- 十六进制:逢十六进一 0 1 2 ...9 a(10)..f(15) 进位 10 11 ..
data04 = 0x10
浮点型float
1.表示小数,包含正数、负数,0.0)。
2.字面值:
小数:1.0 2.5
科学计数法:e/E (正负号) 指数
1.23e-2 (等同于0.0123)
1.23456e5(等同于123456.0)
# 3. 浮点型(小数)float类型
number01 =1.5
print(number01)
number02 =15e-1
number03 = 0.00000000001# 1e-11
print(number03)
字符串str
是用来记录文本信息(文字信息)。
字面值:双引号
"""
字符串
练习:exercise05
"""
# 1. 不可变
name = "悟空"
name = "孙悟空"
print(name) # 创建新字符串对象(孙悟空),替换变量存储的地址。
# 假设可以在原有基础上进行扩充,很可能破坏其他对象内存空间.
# 2. 编码相关函数
# 字 --> 数
print(ord("天"))
# 数 --> 字
print(chr(22825))
# 4. 字符串str类型
message = "我爱编程"
message = "1.5"
"""
古代的秤,一斤十六量.
获取两,显示几斤零几两.
"""
weight_liang = int(input("请输入两:"))
jin = weight_liang // 16
liang = weight_liang % 16
print(str(jin) + "斤零" + str(liang) + "两")
布尔bool
用来表示真和假的类型
True 表示真(条件满足或成立),本质是1
False 表示假(条件不满足或不成立),本质是0
# 1. 布尔 bool 类型
# 命题:带有判断性质的陈述句
# 我是一个帅哥
# 真/对/成立 True
# 假/错/不成立 False
# 类型转换: bool(数据) 有值true 没值false
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False
print(bool(None)) # False
数据类型转换
1.转换为整形: int(数据)
2.转换为浮点型:float(数据)
3.转换为字符串:str(数据)
4.转换为布尔:bool(数据)
结果为False:bool(0) bool(0.0) bool(None)
5.混合类型自动升级:
1 + 2.14 返回的结果是 3.14
1 + 3.0 返回结果是: 4.0
"""
类型转换
语法逻辑:
结果 = 类型名(待转类型)
"""
# input函数的结果是str类型
# str ---> int / float
# 适用性:需要对象字符串进行数学运算
# 注意:待转数据必须"像"转换的类型.
number = float("200.5")
print(number)
# int / float ---> str
# 适用性:需要按照某种格式显示计算后的数值
print(str(10.5))
运算符
算术运算符
+ 加法
- 减法
* 乘法
/ 除法:结果为浮点数
// 地板除:除的结果去掉小数部分
% 求余
** 幂运算
优先级从高到低: ()
**
* / % //
+ -
"""
公式:
距离 =初速度 * 时间的一半 + 加速度 × 时间的平方
已知:
距离,时间,初速度
计算:
加速度
加速度 = (距离 - 初速度 * 时间 / 2) / 时间**2
"""
s = float(input("请输入距离:"))
t = float(input("请输入时间:"))
v0 = float(input("请输入初速度:"))
a = (s - v0 * t / 2) / t ** 2
print(a)
"""
练习:时间换算
获取分钟数
获取小时数
获取天数
显示:?天?小时?分钟总共是?秒.
"""
minute = input("请输入分钟数:")
hour = input("请输入小时数:")
day = input("请输入天数:")
result = int(minute) * 60 + int(hour) * 60 * 60 + int(day) * 24 * 60 * 60
print(day + "天" + hour + "小时" + minute + "分钟总共是" + str(result) + "秒.")
# 1. + - * / // % 幂运算**
number01 = 5
number02 = 2
result = number01 + number02 # 7
print(result)
print(number01 ** 2) # 5 的2 次方: 5 * 5
number01 = "5"
number02 = "2"
result = number01 + number02 # 不是数学运算,而是文字拼接52
print(result)
# 需求1:整数的个位数是多少? --> 余数
number = 56
print(number % 10) # 6
# 需求2:70秒是几分钟零几秒? --> 地板除(整数除)
second = 70
print(second // 60) # 分钟
print(second % 60) # 秒
增强运算符
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
"""
获取一个4位整数 1234
输出每位相加和 1+2+3+4
"""
# # 方法1
# number = int(input("请输入整数:"))
# # 个位
# unit01 = number % 10
# # 十位 1234 --> 123 --> 3
# unit02 = number // 10 % 10
# # 百位 1234 --> 12 --> 2
# unit03 = number // 100 % 10
# # 千位 1234 --> 1
# unit04 = number // 1000
# print(unit01 + unit02 + unit03 + unit04)
# 方法2
number = int(input("请输入整数:"))
# 个位
result = number % 10
# 十位
result += number // 10 % 10
# 百位
result += number // 100 % 10
# 千位 1234 --> 1
result += number // 1000
print(result)
# 2. 增强运算符 += -= *= /= //= %= **=
# data01 = 6
# 运算后的结果,不影响变量自身
# print(data01 + 1)# 7
# print(data01)# ? 6
data01 = 6
# 运算后的结果,又赋值给了变量自身.
data01 += 1 # data01 = data01 + 1
print(data01)# 7
比较运算符
< 小于
<= 小于等于
> 大于
>= 大于等于
== 等于
!= 不等于
返回布尔类型的值
比较运算的数学表示方式:0 <= x <= 100
# 2. > < >= <= 等于== 不等于!=
# 比较数值大小,结果是bool类型
data01 = 50
data02 = "50"
print(data01 == data02) # false
print(50 != "50") # false
逻辑运算符
与and
表示并且的关系,一假俱假。
示例:
True and True # True
True and False # False
False and True # False
False and False # False
# 3. 与and 或 非
# 判断多个命题关系
# 与and 现象:一假俱假 并且关系(必须满足所有条件)
print(True and True) # True
print(False and True) # False
print(True and False) # False
print(False and False) # False
或or
表示或者的关系,一真俱真
示例:
True or True # True
True or False # True
False or True # True
False or False # False
# 或or 现象:一真俱真 或者关系(满足一个就行)
print(True or True) # True
print(False or True) # True
print(True or False) # True
print(False or False) # False
非 not
表示取反
例如:
not True # 返回False
not False # 返回True
# 非 取反
print(not True) # False
短路运算
一但结果确定,后面的语句将不再执行。
"""
短路逻辑
一但结果确定,后面的语句将不再执行。
价值:尽量将耗时的判断放在后面
"""
# False and ?
result = 1 > 2 and input("请输入") == "a"
# True or ?
result = 1 < 2 or input("请输入") == "a"
# 终端中是否有"请输入"
"""
获取一个年份
如果是闰年输入True,否则输出false
条件:
1. 年份能被4整除但是不能被100整除
2. 年份能被400整除
"""
year = int(input("请输入年份:"))
result = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(result)
身份运算符
语法:
x is y
x is not y
作用:
is 用于判断两个对象是否是同一个对象,是时返回True,否则返回False。
is not 的作用与is相反
"""
身份运算符
"""
list01 = [100]
list02 = [100]
# 两个变量指向的对象是否同一个
print(list01 is list02)# False
list03 = lis