Day02 - 语言元素
程序和进制 - 指令和程序 / 冯诺依曼机 / 二进制和十进制 / 八进制和十六进制
变量和类型 - 变量的命名 / 变量的使用 / input函数 / 检查变量类型 / 类型转换
数字和字符串 - 整数 / 浮点数 / 复数 / 字符串 / 字符串基本操作 / 字符编码
运算符 - 数学运算符 / 赋值运算符 / 比较运算符 / 逻辑运算符 / 身份运算符 / 运算符的优先级
应用案例 - 华氏温度转换成摄氏温度 / 输入圆的半径计算周长和面积 / 输入年份判断是否是闰年
一、程序和进制
指令和程序有何区别?简介指令的执行过程?
指令:指令是指计算机执行某种操作的命令,它由一串二进制数码组成。计算机执行了一指令序列,便可完成预定的任务,这一指令序列就称为程序;
程序:程序是计算机所以指令的集合,称为该计算机的指令系统; 指令的执行过程分为四步:1.取指令;2.分析指令;3.执行指令;4.完成上述操作后,指令计数器加1,为执行下一条指令做准备。
冯·诺依曼体系结构
美籍匈牙利数学家冯·诺伊曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺依曼体系结构冯·诺伊曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯·诺伊曼的这个理论称为冯·诺伊曼体系结构。
二、系列数据类型
一、Python系列数据概述
1、数组
- 一种数据结构,用于储存和处理大量数据。
2、系列数据类型 - 一组有序列的元素的组合。
- 包括:元组、列表、字符串和字节数据。
二、系列数据的基本操作
1、系列的长度、最大值、最小值、求和
- len()、max()、min()、sum()
2、系列的索引访问操作
- 通过索引下标访问的可迭代对象。
3、系列切片操作 - 截取系列s的一部分。
4、系列连接和重复操作 - 通过连接符+,可以连接两个系列,形成新的系列对象。
- 通过连接符*,可以重复系列n次。
5、系列的成员关系操作 - 判断一个元素x是否存在于系列s中。
6、系列的比较运算操作 - 两个系列支持比较运算符(<、<=、==、!=、>、>=),字符串比较运算按顺序逐个元素进行比较。
7、系列的排序操作 - 通过内置函数sorted(),可以返回系列的排序表格。
- 通过类reversed构造函数,可以返回系列的反序的迭代器。
8、内置函数all()和any() - 通过内置函数all()和any(),可以判断系列的元素是否全部和部分为true。
9、系列拆封 - 1、变量个数和系列长度相等:使用赋值语句,可将系列值拆封,然后赋值给多个变量。
- 2、变量个数和系列长度不等:系列长度未知,可使用 * 元组变量,将多个值作为元组赋值给元组变量。
- 一个赋值语句中,* 变量只允许出现一次,否则导致错误。
- 3、使用临时变量_ :只需要部分数据,系列其他位置可以使用临时变量"_"。
三、元组
1、使用元组字面创建元组实例对象
- 元组字面量采用圆括号中用逗号分隔的项目定义。圆括号可以省略。
2、使用tuple对象创建实例对象
3、元组的系列操作 - 元组支持系列的基本操作,包括索引访问、切片操作、连接操作、重复操作、成员关系操作、比较运算操作、以及求元组长度、最大值、最小值等。
四、列表
1、使用列表字面创建元组实例对象
- 列表字面量采用方括号中用逗号分隔的项目定义。
2、使用list对象创建元组实例对象
3、列表的系列操作 - 列表支持系列的基本操作,包括索引访问、切片操作、连接操作、重复操作、成员关系操作、比较运算操作、以及求元组长度、最大值、最小值等。
4、list对象的方法 - s.append(x)把对象x追加到列表s尾部。
- s.clear()删除所有元素。相当于del s[:]
- s.copy()复制列表。
- s.extend(t)把系列t附加到s尾部。
- s.insert(i, x)在下标i位置插入对象x。
- s.pop([i])返回并移除下标i的位置对象,省略i时为最后对象。若超出下标,将导致错误。
- s.remove(x)移除列表中第一个出现的x。若对象不存在,将导致错误。
- s.reverse()列表反转。
- s.sort()列表排序。
5、列表解析表达式 - 可处理迭代对象,并生成结果列表。
五、字符串
1、字符串的系列操作
- 字符串支持系列的基本操作,包括索引访问、切片操作、连接操作、重复操作、成员关系操作、比较运算操作、以及求元组长度、最大值、最小值等。
2、字符串编码
3、字符串格式化
[1].%元算符形式
- 格式字符串的标志符:
- (1)‘0’:数值类型格式化结果左边用零填充。
- (2) ‘_’:结果左对齐。
- (3)’ ':对于正值,结果中将包括一个前导空格。
- (4)’+’:数值结果总是包括一个符号(+或-)。(5) ‘#’:使用另一种转换方式。
- 格式化类型字符:
- (1) %d或%i:有符号整数(十进制)。
- (2) %o:有符号整数(八进制)。
- (3) %u:同%d,已过时。
- (4) %x:有符号整数(十六进制,小写字符),标志符为#时,输出前缀’0x’。
- (5) %X:有符号整数(十六进制,大写字符),标志符为’#‘时,输出前缀’0X’。
- (6) %e:浮点数字(科学记数法,小写e),标志符为’#'时,总是带小数点。
- (7) %E:浮点数字(科学记数法,大写E),标志符为’#'时,总是带小数点。
- (8) %f或%F:浮点数字(用小数点符号),标志符为’#'时,总是带小数点。
- (9) %g:浮点数字(根据值的大小采用%e或%f),标志符为’#'时,总是带小数点,保留后面0。
- (10)%G:浮点数字(根据值的大小采用%E或%F),标志符为’#'时,总是带小数点,保留后面0。
- (11)%c:字符及其ASCII码。
- (12)%r:字符串,使用转换函数repr(), 标志符为#且指定precision 时, 截取precision个字符。
- (13)%s;:字符串,使用转换函数str0,标志符为"且指定pecision时,截取precision个字符。
- (14)%a: 字符串,使用转换函数ascio,标志符为#且指定pecision时,截取precision个字符。
- (15) %:百分号标记。
[2].format内置函数
- 格式化类型字符:
- (1) b:二进制数。
- (2) c: 字符,整数转换为对应的Unicode。(3) d:十进制数。
- (4) 0:八进制数。
- (5) x:十六进制数,小写字符,标志符为#时,输出前缀’0x’。
- (6) X:十六进制数,大写字符,标志符为#时,输出前缀0X。
- (7) e:浮点数字(科学记数法,小写e),标志符为"并时,总是带小数点。
- (8) E:浮点数字(科学记数法,大写E),标志符为并时,总是带小数点。
- (9) f或F;浮点数字(用小数点符号),标志符为#时,总是带小数点。
- (10)g:浮点数字(根据值的大小采用e或f),标志符为半时,总是带小数点,保留后面0。
- (11) G:浮点数字(根据值的大小采用E或F),标志符为发时,总是带小数点,保留后面0。
- (12) n:数值,使用本地千位分隔符。
- (13) s: 字符串,使用转换函数str(), 标志符为’#'且指定precision时,截取precision个字符。
- (14) %:百分比。
[3].字符串的format方法
六、字节系列
1、bytes常量
- 使用字母 b加单引号或双引号括起来的内容,是byes常量。bytes 常量与字符串定义方式类似,
- (1)单引号(b’ )。包含在单引号中的字符串,其中可以包含双引号。
- (2)双引号(b" ")。 包含在双引号中的字符串,其中可以包含单引号。
- (3)三单引号(b" ")。包含在三单引号中的字符串,可以跨行。
- (4)三双引号(b*"" "*)。 包含在三双引号中的字符串,可以跨行。
2、创建bytes对象 - (1)bytes() # 创建空pytes对象
- (2)bytes(n) # 创建长度为n(整数)的bytes对象,各字节为0
- (3)bytes(iterable) # 创建bytes对象,使用iterable中的字节整数
- (4)bytes(object) # 创建bytes对象,复制object字节数据
- (5)bytes([source[, encoding[, errors]]]) # 创建bytes对象
3、创建bytearray对象 - (1bytearray() # 创建空bytearray对象
- (2)bytearray(n) # 创建长度为n(整数)的bytearray对象,各字节为0
- (3)bytearray(iterable) # 创建bytearray对象,使用iterable中的字节整数
- (4))bytearray(object) # 创建bytearray对象,复制object字节数据
- (5))bytearray([source[, encoding[, errors]]]) # 创建bytearray对象
4、bytes和bytearray的系列操作
- 注意:bytes和bytearray的方法不接受字符串参数,只接受bytes和bytearray的参数,否则导致错误。
5、字节编码和解码
- 通过str.encode()方法编码为字节码:通过bytes和bytearray的decode()方法解法码为字符串。
存在的问题即思考:
- s[i]访问系列s在索引i处的元素,得到结果为英文字母,索引下标不是整数则出错。
- bytes((123, 456))# bytearray((123, 456)) 如果iterable中包含0<=x<256的整数,则导致错误
- bytes和bytearray的方法不接受字符串参数,只接受bytes和bytearray的参数,否则导致错误。
三、Python 基本数据类型 (变量、数字、字符串、列表、元组、集合、字典)
1、变量(Ariable)
- 等号(=)用来给变量赋值。
- 等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值
- 赋值之后才能使用,否则会报错,当赋予了一次值后,在赋予一次别的值,值就会改变
- 命名规则:
- 只能包含字母、数字、下划线,可以用中文(但是尽量别用可能会出错)
- 不能以数字开头
- 不能适用Python的关键字,比如print、true等
| 关键字 | 解释 |
|---|---|
| False | 布尔类型的值,表示假,与 True 相反 |
| None | None 比较特殊,表示什么也没有,它有自己的数据类型 - NoneType。 |
| True | 布尔类型的值,表示真,与 False 相反 |
| and | 用于表达式运算,逻辑与操作 |
| as | 用于类型转换 |
| assert | 断言,用于判断变量或者条件表达式的值是否为真 |
| break | 中断循环语句的执行 |
| class | 用于定义类 |
| continue | 跳出本次循环,继续执行下一次循环 |
| def | 用于定义函数或方法 |
| del | 删除变量或序列的值 |
| elif | 条件语句,与 if、else 结合使用 |
| else | 条件语句,与 if、elif 结合使用。也可用于异常和循环语句 |
| except | except 包含捕获异常后的操作代码块,与 try、finally 结合使用 |
| finally | 用于异常语句,出现异常后,始终要执行 finally 包含的代码块。与 try、except 结合使用 |
| for | for 循环语句 |
| from | 用于导入模块,与 import 结合使用 |
| global | 定义全局变量 |
| if | 条件语句,与 else、elif 结合使用 |
| import | 用于导入模块,与 from 结合使用 |
| in | 判断变量是否在序列中 |
| is | 判断变量是否为某个类的实例 |
| lambda | 定义匿名函数 |
| nonlocal | 用于标识外部作用域的变量 |
| not | 用于表达式运算,逻辑非操作 |
| or | 用于表达式运算,逻辑或操作 |
| pass | 空的类、方法或函数的占位符 |
| raise | 异常抛出操作 |
| return | 用于从函数返回计算结果 |
| try | try 包含可能会出现异常的语句,与 except、finally 结合使用 |
| while | while 循环语句 |
| with | 简化 Python 的语句 |
| yield | 用于从函数依次返回值 |
2、数字(Number)
- type()不会认为子类是一种父类类型。
- isinstance()会认为子类是一种父类类型
- 加减乘除:用小数点进行计算的时候有的时候不一定全部都正确,因为是电脑主机的原因
- 在使用除法时用(/)结果是有小数点,所以这时候要采用(//)双斜杠,就没有小数点;
- 平方:
- 2的平方:2**2》4
- 2的三次方:2**3》8
- 2的四次方:2**4》16
- 求余:用符号%
- 7%5》2
- 4%3》1
3、字符串(Characte String)
- 要用引号包裹,引号不会显示,单双引号都行,前后一致
- “ I’m the winer! ”再用英文时,单双引号不要弄混,只用双引号包裹最好
- 当需要在字符中使用特殊字符时,Python用反斜杠\转义字符、print()转义字符
- print(‘hello’)》》hello》去掉引号
- ‘I’m liushishi’》》“I’m liushishi”》让字母中的引号只是普通的英文字符
链接字符:使用加号(+),但是占更多内存,影响速度
-
a = ‘hello’
-
b = ‘world’
-
a + b
- ‘helloworld’
-
a = 'hello ’
-
b = ‘world’
-
a + b
- ‘hello world’(在hello的后面加一个空格,单词就会隔开)
格式化字符串:f-string
-
name = ‘xiaohong’
-
age = 18
-
f’ xiaohong {age} ’
- ’ xiaohong 18 '(用双引号一样)
-
print(f’ xiaohong {age} ')
- xiaohong 18
字符串方法(method),如:upper
-
‘xiaohong’.upper()
- ‘XIAOHONG’(全部变为大写)
索引(index),要用[]方括号
-
a = ‘hello’
-
a[1]
- ‘e’
-
a[-1]
- ‘o’
-
a[-2]
- ‘l’
-
a[-3]
- ‘l’
-
a[-4]
- ‘e’(用负数就是倒过来开始)
-
a[1:3]
- ‘el’
-
a[0:5]
- ‘hello’
-
a[0:4]
- ‘hell’(从第h开始的4个字母,这里的0就相当于第一个字母)
4、列表(List)
- 由特定的的元素组成,方括号包裹,逗号分隔,可以装多种元素
- [:n]从开头开始到第n-1个元素,[n:]从第n个元素开始到最后
-
a = [1,2,3,4,5]
-
a[:3]
- [1,2,3]
-
a[2:]
- [3,4,5]
- 修改元素
-
a = [1,2,3,4,5]
-
a[0] = 300
-
a
- [300, 2, 3, 4, 5]
- 添加元素(append方法)直接添加到最后,添加文字时,要添加单引号或者双引号,数字除外
- 添加元素(insert方法)插入添加插入数字,插入到所选的前面,a.insert(n,m),结果在n的前面
- 删除元素(pop方法)
- 查数段len(),查里面总共有多少数字
5、元组(Tuple)
- 元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
- 元组与字符串类似,可以被索引且下标索引从0开始,-1 为从末尾开始的位置。也可以进行截取
- 与字符串一样,元组的元素不能修改。
- 元组也可以被索引和切片,方法一样。
- 注意构造包含0或1个元素的元组的特殊语法规则。
- 元组也可以使用+操作符进行拼接。
6、集合(Set)
- 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
- 基本功能是进行成员关系测试和删除重复元素。
- 可以使用大括号 { } 或者 set() 函数创建集合。
- 创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
7、字典(Dictionary)
- 列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
- 运用赋值时用“[]”
- 构造函数 dict() :要“dict([])”
- 字典是一种映射类型,它的元素是键值对。
- 字典的关键字必须为不可变类型,且不能重复。
- 创建空字典使用 { }。
四、运算符
1、[算术运算符]
- % :取模 - 返回除法的余数
2、[比较运算符]
- 运用“if函数”
- == 等于 - 比较对象是否相等
- != 不等于 - 比较两个对象是否不相等
- “ >” 大于 - 返回x是否大于y
- ”<“ 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。
- “>=” 大于等于 - 返回x是否大于等于y。
- “<=” 小于等于 - 返回x是否小于等于y。
3、[赋值运算符]
-
运用“if函数”
- = 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
- += 加法赋值运算符 c += a 等效于 c = c + a
- -= 减法赋值运算符 c -= a 等效于 c = c - a
- *= 乘法赋值运算符 c *= a 等效于 c = c * a
- /= 除法赋值运算符 c /= a 等效于 c = c / a
- %= 取模赋值运算符 c %= a 等效于 c = c % a
- “**=” 幂赋值运算符 c **= a 等效于 c = c ** a
- //= 取整除赋值运算符
-
这个运算过程不能放在print()里面,运算最好print()里面有不同的文字,这样好区分,也可以让运算结果更准确,要不然就每个分开输入
4、[位运算符]
- 运用“if函数”
- & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
- | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 61 ,二进制解释: 0011 1101
- ^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
- ~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
- “<<” 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000
- ”>>“ 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释: 0000 1111
5、[逻辑运算符]
- 运用“if函数”
- and 。。。。x and y “与” - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
- or 。。。。x or y “或” - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
- not 。。。。not x “非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
6、[成员运算符]
- 运用“if函数”
- in 如果在指定的序列中找到值返回 True,否则返回 False。
- not in 如果在指定的序列中没有找到值返回 True,否则返回 False。
7、[身份运算符和运算符优先级]
- 运用“if函数”
- 运算符优先级 print()要定格