课程b站链接
10. 2.2.2 计算机与程序设计_哔哩哔哩_bilibili
重难点截自菜鸟教程
2.2.3 静态语言与脚本语言
静态语言:编译器。C、Java。一次性生成目标代码,运行更快
脚本语言:解释器。Python、PHP、JavaScrip。逐行翻译,需要源代码参与,类似同声传译
2.2.4 程序基本编写方法IPO
I:Input 输入,程序的输入。
P:Process 处理,程序的主要逻辑。
O:Output 输出,程序的输出。
2.2.5 计算机编程
计算思维(计算机)逻辑思维(数学)实证思维(物理)
思考:解决方法,用户体验,执行效率。
2.3.4 程序编写与运行
两种编程方式:交互式和文件式
交互式:对每个输入语句即时运行效果,适合语法学习。
文件式:主要方式,一次性运行。
2.4.1 温度转换实例
华氏度:32-212
摄氏度:0-100
2.5.2 程序的格式框架
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
python的缩进是严格的,是语法的一部分,表达程序的格式框架,层次关系。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。
单行注释:# ...
多行注释:''' ... '''
2.5.3 命名与保留字
变量:程序中用于保存和表示数据的占位符号。
赋值:单一等号=
命名:大小写敏感,首字不能是数字,不能与保留字(33个)相同。
标准数据类型
Python3 中有六个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
数字类型
一共有4种:整数,浮点数,布尔型,复数。
- int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
- bool (布尔), 如 True,False。
- float (浮点数), 如 1.23、3E-2
- complex (复数), 如 1 + 2j、 1.1 + 2.2j
内置的 type() 函数可以用来查询变量所指的对象类型。此外,还可以isinstance函数
Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加, True==1、False==0 会返回 True,但可以通过 is 来判断类型。
——数值运算
/是得到浮点数
//是得到整数
在混合计算时,Python会把整型转换成为浮点数。
字符串
字符串:由一对单引号或一对双引号表示,单引号和双引号完全相同。
字符串可以进行索引:有两种方法:
- 正向递增序号:0开始
- 反向递减序号:-1开始
转义符:\
不转义可以在字符串前面添加一个 r ,如 r"this is a line with \n" 则 \n 会显示,并不是换行
字符串可以用 + 运算符连接在一起,用 * 运算符重复。
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
- 索引:返回字符串中的单个字符, <字符串>[M]
- 切片:返回字符串中的一段子串: <字符串>[M:N] 注意,M是包含的,N是不包含的!
word = '字符串'
sentence = "这是一个句子。"
paragraph = """这是一个段落,
可以由多行组成"""
print (str[2:5]) 输出从第三个开始到第五个的字符,注意,是第五个!前后计算方法不一样!
与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如 word[0] = 'm' 会导致错误。
列表(List)
Python 有 6 个序列的内置类型,但最常见的是列表和元组。
列表都可以进行的操作包括索引,切片,加,乘,检查成员。
列表的数据项类型可以不相同
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']
——更新列表
list[2] = 101
append() 方法用于在列表末尾添加新的对象。
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
——删除列表元素
可以使用 del 语句来删除列表的的元素
del list[2]
print ("删除第三个元素 : ", list)
remove()
——嵌套列表
[['a', 'b', 'c'], [1, 2, 3]]
元组
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。即元组所指向的内存中的内容不可变。元组写在小括号 () 里,元素之间用逗号隔开。
元组中的元素类型也可以不相同
其实,可以把字符串看作一种特殊的元组。
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
string、list 和 tuple 都属于 sequence(序列)
集合
是一个无序的不重复元素序列。
用{}或set()创建集合,注意创建空集合必须是set(),创建空字典是{}
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)
——集合基本操作
- 添加元素
s.add( x ) 如果元素已存在,则不进行任何操作。
s.update( x ) 且参数可以是列表,元组,字典
- 移除元素
s.remove( x ) 如果元素不存在,则会发生错误。
s.discard( x )
- 计算集合元素个数
len(s)
- 清空集合
s.clear()
字典
——创建字典
- 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典在花括号 {} 中
- 键必须是唯一的,但值则不必。
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
- 创建时如果同一个键被赋值两次,后一个值会被记住
tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}
使用内建函数 dict() 创建字典:
——访问字典
把相应的键放入到方括号[]中
tinydict['Name']: Runoob
tinydict['Age']: 7
如果没有该键则会报错
——修改字典
tinydict['Age'] = 8 # 更新 Age
tinydict['School'] = "菜鸟教程" # 添加信息
——删除字典(元素)
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del tinydict['Name'] # 删除键 'Name'
tinydict.clear() # 清空字典
del tinydict # 删除字典
数据类型转换
Python 数据类型转换可以分为两种:
- 隐式类型转换 - 自动完成
- 显式类型转换 - 需要使用类型函数来转换
隐式:较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。
显式:我们使用 int()、float()、str() 等预定义函数来执行显式类型转换。
- int() 强制转换为整型:
x = int(1) # x 输出结果为 1
y = int(2.8) # y 输出结果为 2
z = int("3") # z 输出结果为 3
- float() 强制转换为浮点型:
x = float(1) # x 输出结果为 1.0
y = float(2.8) # y 输出结果为 2.8
z = float("3") # z 输出结果为 3.0
w = float("4.2") # w 输出结果为 4.2
- str() 强制转换为字符串类型:
x = str("s1") # x 输出结果为 's1'
y = str(2) # y 输出结果为 '2'
z = str(3.0) # z 输出结果为 '3.0'
运算符
Python 语言支持以下类型的运算符:
算数运算符
+ - * / % //(取整除 - 往小的方向取整数) **(幂)
比较运算符
编辑
赋值运算符
各种算术运算符加上=号,比如a += c,意思是 a = a + c
编辑
位运算符 (按位...)
与: & 全1则1,有0则0
或: | 有1则1,全0为0
异或: ^ 相异则1
取反:~ 0变1,1变0
左移位:<< 高位丢弃,低位补0,a<<2的意思是左移2位
右移位:>> 低位丢弃,高位补0。
逻辑运算符(布尔...)
成员运算符
in:如果在指定的序列中找到值返回 True
not in:如果在指定的序列中没有找到值返回 True
a = 10
b = 20
list = [1, 2, 3, 4, 5 ]
if ( a in list ):
print ("1 - 变量 a 在给定的列表中 list 中")
else:
print ("1 - 变量 a 不在给定的列表中 list 中")
身份运算符
用于比较两个对象的存储单元
还不太理解。。。
优先级
2.5.5 语句与函数
多行语句:
\使用反斜杠
分支语句:注意冒号结尾!
if语句
按上下顺序判断
使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
if :
...
elif :
...
else :
...
if嵌套
num=int(input("输入一个数字:"))
if num%2==0:
if num%3==0:
print ("你输入的数字可以整除 2 和 3")
else:
print ("你输入的数字可以整除 2,但不能整除 3")
else:
if num%3==0:
print ("你输入的数字可以整除 3,但不能整除 2")
else:
print ("你输入的数字不能整除 2 和 3")
循环语句
while循环
同样需要注意冒号和缩进
在 Python 中没有 do..while 循环。
while ... :
...
...
循环体
——while...else语句
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
for循环
遍历任何可迭代对象,如一个列表或者一个字符串
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
print(site)
word = 'runoob'
for letter in word:
print(letter)
——for...else语句
当循环执行完毕(即遍历完 iterable 中的所有元素)后,会执行 else 子句中的代码,如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句。
range()函数
主要用于遍历,它会生成数列
range(5)是0到4
range(1,5)是从1到4
带步长的如下:
>>
for i in range(0, 10, 3) :
print(i)
>>
0
3
6
9
break和continue函数
break函数
跳出整个循环体
continue语句
跳出这一次循环,并进入下一次循环
pass语句
pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句
del语句
删除变量
var1 = 1
var10 = 2
del var1,var10
2.5.6 程序的输入输出
变量 = input(“请输入”)
print(“你好”)
eval函数:去掉参数最外侧引号并执行余下语句,比如:
eval("1+2"),运行结果为3
空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。
类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行不是语法的一部分,有没有无所谓,便于维护。
同一行显示多条语句
Python 可以在同一行中写多条语句,语句之间使用分号 ; 分割,以下是一个简单的实例:
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
多个语句构成代码组
缩进相同的一组语句构成一个代码块,我们称之代码组。
print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":
# 不换行输出
print( x, end=" " )
print( y, end=" " )
import 与 from...import
允许多变量赋值
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
a, b, c = 1, 2, "runoob"
函数
(73条消息) Python函数知识点(详解)_辰兮要努力的博客-CSDN博客
摘自这篇文章
def 函数名(参数列表):
函数体
如果函数中执行到了return也会结束函数
函数参数
- 形参:定义时小括号中的参数
- 实参:调用时小括号里的参数
——缺省参数:在形参中默认有值的参数,称之为缺省参数,如果实参没有传入则取默认值
- 注意:带有默认值的参数一定要位于参数列表的最后面!
def printinfo(name, age=35):
# 打印任何传入的字符串
print("name: %s" % name)
print("age %d" % age)
# 调用printinfo函数
printinfo(name="miki") # 在函数执行过程中 age去默认值35
printinfo(age=9 ,name="miki")
——不定长参数
有时需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。
def functionname([formal_args,] *args, **kwargs):
注意:
加了星号(*)的变量args会存放所有未命名的变量参数,args为元组
而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.
看示例就明白了:
def fun(a, b, *args, **kwargs):
print("a =%d" % a)
print("b =%d" % b)
print("args:")
print(args)
print("kwargs: ")
for key, value in kwargs.items():
print("key=%s" % value)
fun(1, 2, 3, 4, 5, m=6, n=7, p=8) # 注意传递的参数对应
- 如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面,
但如果有**kwargs的话,**kwargs必须是最后的
函数的返回值
在python中我们怎样返回多个值?
def divid(a, b):
shang = a//b
yushu = a%b
return shang, yushu #默认是元组
result = divid(5, 2)
print(result) # 输出(2, 1)
- return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据。
函数嵌套调用
如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次 函数A执行的位置
局部变量
就是在函数内部定义的变量,且只在函数内部起作用
全局变量
在函数外边定义的变量,任何函数都能调用
注意:
- 当函数内出现局部变量和全局变量相同名字时,
函数内部中的 变量名 = 数据
此时理解为定义了一个局部变量,而不是修改全局变量的值。
- 如果在函数中出现global 全局变量的名字 那么这个函数中即使出现和全局变量名相同的变量名 = 数据 也理解为对全局变量进行修改,而不是定义局部变量
# 可以使用一次global对多个全局变量进行声明
global a, b
# 还可以用多次global声明都是可以的
# global a
# global b
模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。
模块可以被别的程序引入,以使用该模块中的函数等功能。
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support,需要把命令放在脚本的顶端:
搜索路径被存储在 sys 模块中的 path 变量
Windows 是一个不区分大小写的系统