001讲
0. Python 是什么类型的语言?
Python是脚本语言
以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则。
特性:
- 语法和结构通常比较简单
- 学习和使用通常比较简单
- 通常以容易修改程序的“解释”作为运行方式,而不需要“编译”
- 程序的开发产能优于运行性能
一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组串行。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令串行的指令,还可以编写更复杂的程序。
1. IDLE 是什么?
IDLE是一个Python Shell,shell的意思就是“外壳”,基本上来说,就是一个通过键入文本与程序交互的途径!
像我们Windows那个cmd窗口,像Linux那个黑乎乎的命令窗口,他们都是shell,利用他们,我们就可以给操作系统下达命令。同样的,我们可以利用IDLE这个shell与Python进行互动。
2. print() 的作用是什么?
print() 会在输出窗口中显示一些文本
3. 为什么 >>>print('I love fishc.com ' * 5) 可以正常执行,但 >>>print('I love fishc.com ' + 5) 却报错?
在 Python 中不能把两个完全不同的东西加在一起,比如说数字和文本
乘以一个整数来翻倍就具有一定的意义了,前边的例子就是将 "I love fishc.com" 这个字符串打印五次。
4. 如果我需要在一个字符串中嵌入一个双引号,正确的做法是?
可以利用反斜杠(\)对双引号转义:\"
或者用单引号引起这个字符串。例如:' I l"o"ve fishc.com '。
5.动手试试直接输入 >>>5+8 与输入 >>>print(5+8) 有何不同?
不妨试试直接直接输入 >>>'I love fishc.com!' 与输入 >>>print('I love fishc.com!') 有何不同?
没错,直接输入是将结果及类型打印到屏幕上,而print是将结果打印到屏幕上
18:35:03 2020-02-10
002讲
ctrl+n新建
python要注意缩进 if guess==8:#==判断是否相等 =赋值
BIF=内置函数(built-in function)
help(bif)了解功能
1. 用课堂上小甲鱼教的方法数一数 Python3 提供了多少个 BIF?
在 Python 或 IDLE 中,输入 dir(__builtins__) 可以看到 Python 提供的内置方法列表(注意,builtins 前后是两个下划线哦)其中小写的就是 BIF。如果想具体查看某个 BIF 的功能,比如 input(),可以在 shell 中输入 help(input),就会得到这个 BIF 的功能描述。哦,答案应该是 68 个。
2. 在 Python 看来:'FishC' 和 'fishc' 一样吗?
不一样,因为 Python 是一个“敏感的小女孩”,所以不要试图欺骗她,对 Python 来说,fishc 和 FishC 是完全不同的两个名字,所以编程的时候一定要当心。不过 Python 会帮助解决可能因此出现的问题,例如只有当标识符已经赋值后(还记得吗,小甲鱼在课堂中说过 Python 的变量是不用先声明的)才能在代码中使用,未赋值的标识符直接使用会导致运行时错误,所以你很快就可以根据经验发现此问题。
3. 在小甲鱼看来,Python 中什么是最重要的?你赞同吗?
缩进!在小甲鱼看来,缩进是 Python 的灵魂,缩进的严格要求使得 Python 的代码显得非常精简并且有层次。
所以在 Python 里对待缩进代码要十分小心,如果没有正确地缩进,代码所做的事情可能和你的期望相去甚远(就像C语言里边括号打错了位置)。
如果在正确的位置输入冒号“:”,IDLE 会自动将下一行缩进!
4. 这节课的例子中出现了“=”和“==”,他们表示不同的含义,你在编程的过程中会不小心把“==”误写成“=”吗?有没有好的办法可以解决这个问题呢?
C语言的话,如果 if( c == 1 ) 写成 if( c = 1 ),程序就完全不按程序员原本的目的去执行,但在 Python 这里,不好意思,行不通,语法错误!Python 不允许 if 条件中赋值,所以 if c = 1: 会报错!
5. 你听说过“拼接”这个词吗?
在一些编程语言,我们可以将两个字符串“相加”在一起,如:'I' + 'Love' + 'FishC' 会得到 'ILoveFishC',在 Python 里,这种做法叫做拼接字符串。
19:03:00 2020-02-10
003讲
变量名不能用数字开头 大小写不能忽略
字符串单引号双引号都可以 但是两边要相同
转义字符\
打印let's let\'s
三重引号字符串
1.除了使用饭斜杠(\)进行字符转义,还有什么方法可以打印:Let's go! 这个字符串?
>>>"Let's go!"
>>>str = r'C:\Program Files\FishC\Good''\\'
3.使用变量,计算一年有多少秒?
DaysPerYear = 365
HoursPerDay = 24
MinutesPerHour = 60
SecondsPerMinute = 60
result = DaysPerYear * HoursPerDay * MinutesPerHour * SecondsPerMinute
print(result)
10:24:06 2020-02-11
004讲
空格不影响编程 (为了美观)
分支语法
if 条件:
条件真(True)
else:
条件(false)
while循环
while条件:
true条件
and逻辑操作符得到bool值
生成随机数 random模块
randint()#可以返回一个随机整数
进入死循环 快捷键 CTRL + C(强制结束)
造成死循环的原因是 while 后边的条件永远为真(True),在 Python 看来,只有以下内容会被看作假(注意冒号括号里边啥都没有,连空格都不要有!):False None 0 "" '' () [] {}
1. 请写出与 10 < cost < 50 等价的表达式
(10 < cost) and (cost < 50)
2. Python3 中,一行可以书写多个语句吗?
可以,语句之间用分号隔开即可,不妨试试:
>>> print('I love fishc');print('very much!')
3. Python3 中,一个语句可以分成多行书写吗?
可以 一行过长的语句可以使用反斜杠或者括号分解成几行
3>4 and \ 1<2
( 3 > 4 and
1 < 2 )
4. 请问Python的 and 操作符 和C语言的 && 操作符 有何不同?
python
1and3 ->4 0and1 ->0
C
1&&3 ->1 0 &&1 ->0
5.
temp = input('请输入一个整数:') number = int(temp) while number: i = number - 1 while i: print(' ', end = '') i = i - 1 j = number while j: print('*', end = '') j = j - 1 print() number = number - 1
13:18:08 2020-02-11
005讲
数值类型
整型 长度不受限制
浮点型 (区分整型有小数点)
bool型 true=1 false=0
a=5.99 c=int(a) c=5 截取整数部分
a=520 b=float(a) b=520.0
a=5.99 b=str(a) b='5.99'
c=str(5e19) c= '5e19'
type() #确定类型
isinstance()
eg: insintance(a,str) 返回true
insintance(a,int) 返回false
1. 你知道为什么布尔类型(bool)的 True 和 False 分别用 1 和 0 来代替吗?
你可能听说过计算机是很“笨”的,究其根本是因为它只认识二进制数,所以所有的编程语言最终都会转换成简单的二进制序列给 CPU 按照一定的规则解析。
由于二进制只有两个数:0 和 1,因此用 0 和 1 来表示 False 和 True 再适合不过了,因为不用浪费资源在转换的过程上!
2. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?
小数取整会采用比较暴力的截断方式,即向下取整。
但那是对于正数来说……对于负数则刚好相反 —— 是向上取整。
3. 我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int() 按照“四舍五入”的方式取整吗?
int() 固然没那么“聪明”,但机器是死的,鱼油是活的!
5.4 “四舍五入”结果为:5,int(5.4+0.5) == 5
5.6 “四舍五入”结果为:6,int(5.6+0.5) == 6
13:32:12 2020-02-11
006讲
算术操作符 + - * /
%取余
**幂乘
3**2 三的二次幂
/返回浮点型
// 地板除法
10//8得到1
3.0//2.0得到1.0
a=a+3 -> a+=3
优先级 先乘除再加减 右括号先算括号里的
比较操作符 优先于 逻辑操作符
一元(单目)操作符
双目操作符
------------------------------------------------------------------------------------------------------------
逻辑操作符 and or not
and 同真为真
or 一真为真
not 一元 取反
4. 请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
如果你的回答是 0,那么小甲鱼很开心你中招了!
答案是:4
not or and 的优先级是不同的:not > and > or
我们按照优先级给它们加上括号:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
== 0 or 0 or 4 or 6 or 9
== 4
为啥是 4?
大家还记得第四讲作业提到的“短路逻辑”吗?3 and 4 == 4,而 3 or 4 == 3。
所以答案是:4
13:43:00 2020-02-11
007讲 008讲 009讲
分支和循环
框架
加载背景音乐
播放背景音乐(循环)
我方飞机诞生
interval = 0 #定义一个间隔
while true
if 用户x掉
退出
interval += 1
if interval ==50:
interval = 0:
小飞机诞生
小飞机移动位置
屏幕刷新
if用户鼠标移动
我方飞机中心位置=鼠标位置
屏幕刷新
if 我方与对方撞击
我方挂 切换撞击音乐
修改图案
打印game over
停止音乐 最好淡出
悬挂else else匹配错误
条件表达式 三元操作符
断言 assert #用于置入检查点 保证条件真才正常工作
assert后条件为假 自动崩溃 抛出assertionerror异常
>>>assret 3>4
assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。
什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。
一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。
while条件:
循环体
for循环
for 目标 in 表达式:
循环体
range([start,] stop [, step=1] )
break continue
continue 终止本轮循环 并开始下一轮循环 开始下一轮循环前测试循环条件 true 开始下一轮循环
1. 你听说过成员资格运算符吗?
Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则返回 False。
例如:
- >>> name = '小甲鱼'
- >>> '鱼' in name
- True
- >>> '肥鱼' in name
- False
15:17:43 2020-02-11
010讲
列表
数组 放在一起数据必须类型一致
Python无数组 有列表
创建普通列表 用 [ , , , , , ] 创建
可以创造空列表 empty=[]
用 . 调用
只能添加一个元素
insert() #两个参数 第一个是位置 第二个是插入元素内容 从0开始
16:24:04 2020-02-11
011讲
从列表中获取元素 #索引值从0开始
menber[0]
交换 01位置元素
temp=member[0]
member[0] = member[1]
member[1] = temp
删除
remove() #必须知道元素具体名字
member.remove('fish ')
del
del member[1]
还可以用于删除整个列表->del member
pop () #python是用栈存储
member[ : ] # 用途 要修改列表 把之前的做一个拷贝member2=member[ : ]
如果直接=member 那么 member改变 2也改变
012讲
常用列表操作符
比较操作符
列表不相等 返回第一个元素比较值
逻辑操作符
连接操作符
重复操作符
成员关系操作符 in not in
无法判断列表里的列表 只能判断一个层次内的是否存在
列表中的列表中元素值 list[1][1] #类似C语言的二维数组
count ->list3 . count(123) #123在list3中出现多少次
index -> list3.index(123) #123的位置
list3.index(123,3,7) #123在列表3-7范围 出现的位置
reverse ->list3. reverse() #整个列表翻转
sort ->list3.sort() #从小到大排序
->sort(func,key)
->sort(reverse=true)->list3.sort(reverse=true) #从大到小排序
17:02:04 2020-02-11
013讲
元组tuple #与列表相似 元素一点定义不可改变
创建和访问元组
修改一个元素会报错
更新和删除元组
拆分成两半 然后用拼接操作符 分别拷贝一下 再插入
元组相关操作符: 拼接、重复 (*8)、逻辑、关系、成员in not in
17:24:16 2020-02-11
014讲
字符串的方法及注释 Python -help 可以查找帮助
20:00:36 2020-02-11
015讲
format方法 字符串的格式化问题 按照统一规格输出
关键字参数
可以综合使用,但位置 参数要在关键字参数之前
字符串格式化符号转义
符号
|
说明
|
|
%c
|
格式化字符及其 ASCII 码 | |
%s
|
格式化字符串 | |
%d
|
格式化整数 | |
%o
|
格式化无符号八进制数 | |
%x
|
格式化无符号十六进制数 | |
%X
|
格式化无符号十六进制数(大写) | |
%f
|
格式化浮点数字,可指定小数点后的精度 | |
%e
|
用科学计数法格式化浮点数 | |
%E
|
作用同 %e,用科学计数法格式化浮点数 | |
%g
|
根据值的大小决定使用 %f 或 %e | |
%G
|
作用同 %g,根据值的大小决定使用 %f 或者 %E |
格式化操作符辅助命令
符号
|
说明
|
|
m.n
|
m 是显示的最小总宽度,n 是小数点后的位数 | |
-
|
用于左对齐 | |
+
|
在正数前面显示加号(+) | |
#
|
在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X' | |
0
|
显示的数字前面填充 '0' 取代空格 |
Python 的转义字符及其含义
符号
|
说明
|
\'
|
单引号 |
\"
|
双引号 |
\a
|
发出系统响铃声 |
\b
|
退格符 |
\n
|
换行符 |
\t
|
横向制表符(TAB) |
\v
|
纵向制表符 |
\r
|
回车符 |
\f
|
换页符 |
\o
|
八进制数代表的字符 |
\x
|
十六进制数代表的字符 |
\0
|
表示一个空字符 |
\\
|
反斜杠 |
17:22:12 2020-02-12
016讲
序列
list()把一个可迭代对象转换为列表
不带参数 生成一个空列表
带一个iterable迭代器
>>>list(ennumberate(numbers)) #列表每个元素变成一个元组,,元组前加了一个index值
zip a=[1,2,3,4,5,6] b=[1,2,3] >>>list (zip(a,b)) [(1,1),(2,2),(3,3)] #成对打包
20:26:49 2020-02-12