第四篇.python基础01
1. 变量
-
什么是变量
变化的量:有名字有值
-
为什么要有变量?
变量 能够描述世间万物的状态,人有年龄的变量,树也有身高的变量,电脑里的等级也有变量的属性,没有变量一切将枯燥无味。
-
定义变量
name = 'nick' age = 19 gender = 'male' height = 180 weight = 140
-
变量的组成
-
变量名:变量名用来引用变量值,但凡需要用变量值,都需要通过变量名。
-
赋值符号:赋值
-
变量值:存放数据,用来记录现实世界中的某种状态
-
-
变量名的规范命名
- 变量的命名应该能反映变量值所描述的状态,切记不可用中文
- 变量名必须用字母数字下划线组合,并且变量名的第一个字符不能是数字。
- 关键字不能声明为变量名
-
变量名的两种格式
6.1驼峰体
AgeOfNick = 19 print(AgeOfNick)
6.2 下划线(推荐)
age_of_nick = 19 print(age_of_nick)
2. 常量
- 不变的量 比如人的性别 计算机的π数值
3. python变量内存管理
-
变量存在哪了
x=1运行之前只是普通的字符,存在里硬盘里,但是运行py文件的时候,字符就传到了内存,就是说变量存在了内存里;综上所述,运行之前存在硬盘里,运行之后存在内存里
-
python垃圾回收机制
只要某个变量值绑定着门牌号,就不是垃圾,反之变量值没有绑定着门牌号,这个变量值就是垃圾,python就会自动清理这个垃圾。
-
小整数池
Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256]
4. 变量的三个特征
-
打印
x = 10 print(x) # 获取变量的变量值
-
判断变量值是否相等
name1 = 'egon' name2 = 'nick' print(name1 == name2) # False
-
判断变量id是否相等
x = 11 y = x z = 11 print(x == y) # True
print(x is y) # True
True
print(x is z) # True,整数池的原因 True x = 257 z = 257 print(x is z) # False
5. 花式赋值
-
链式赋值
a = 10 b = 10 c = 10 d = 10 print(f'a:{a}, b:{b}, c:{c}, d:{d}')
a:10, b:10, c:10, d:10
-
交叉赋值
x = 100 y = 200 temp = x x = y y = temp print(f'x:{x}') print(f'y:{y}')
x:200
y:100x, y = y, x print(f'x:{x}') print(f'y:{y}')
x:100
y:200
6. 注释
-
注释
# 单行注释 ''' 三单引号注释 三单引号注释 ''' """ 三双引号多行注释 三双引号多行注释
-
添加赋值的原则
1. 不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
2. 注释可以用中文或英文,但不要用拼音
7. 数据类型基础
-
什么是数据类型
数据类型指的是变量值的不同类型,姓名可能是一种数据类型,年龄可能是数据类型。。。
-
为何对数据分类
变量是用来反映状态变化的,不同的状态就应该用不同类型的数据去标识。
-
不同数据类型
数字类型
字符串类型
列表类型
字典类型
布尔类型
8. 数字类型
-
整型int
1.1作用
可以表示年龄、号码、级别
1.2定义
age = 18 # age=int(18) print(id(age)) print(type(age)) print(age)
-
浮点型float
2.1作用
可以表示身高体重、薪资
2.2定义
salary = 2.1 # salary=float(2.1) print(id(salary)) print(type(salary)) print(salary)
2.3如何用
加减乘除、逻辑判断(大于、小于)
9. 字符串类型
-
字符串(str)
1.1作用
可以表示名字爱好
1.2定义
相当于一根羊肉串,字符串就是一串被串起来的字符,在单引号、双引号、三引号包裹的一串字符,除了三引号可以换行,单双的字符不行
salary = 2.1 # salary=float(2.1) print(id(salary)) print(type(salary)) print(salary)
name3 = """nick egon""" print(name3)
-
如何用
字符串只能+-和逻辑比较
msg2 = "my name is 'nick'" msg3 = 'my name is "nick"' print(msg2 + msg3) # my name is 'nick'my name is "nick"
注意:字符串的拼接,就是重新申请空间,把两个字符串都拷贝一份后再拼接
str='"hello"'
注意:如果字符串内有引号,则包裹的字符串的引号不能和字符串内部的引号的一样
name = 'nick ' print(name * 10)
注意:字符串的乘法只能乘以数字
msg1 = 'hello' msg2 = 'z' print(msg1 > msg2)
注意:字符串比较大小,按照ascll码比较
msg3 = 'zero' msg4 = 'zx' print(msg3 > msg4) print('Z' > 'A') print('Z' > 'a')
注意:字符串的比较是字母的顺序
False
True
False
10. 列表类型
-
列表(list)
1.1作用
存放多个值,多个爱好
1.2定义
在[]内用逗号隔开任意类型的值
hobby = 'read' hobby_list = [hobby, 'run', 'girl'] print(id(hobby_list)) print(type(hobby_list)) print(hobby_list)
4558605960
<class 'list'>
['read', 'run', 'girl']
1.3如何用
存不是目的,取才是目的,列表索引序号从0开始
hobby_list = ['read', 'run', 'girl'] # 索引序号 0 1 2 # 取出第二个爱好 print(hobby_list[1])
run
hobby_list = ['read', 'run', ['girl_name', 18, 'shanghai']] # 取出girl的年龄 print(hobby_list[2][1])
18
11. 字典类型
-
字典(dict)
1.1作用
用来存取多个值,但我们能通过列表取值,是因为我们知道列表内所有的元素。那我们可以给列表内的每个元素添加一个描述信息。于是有种新的数据类型---字典。
按照key:value的方式存值,取得时候可以通过key而非索引取值,key对value有描述性的作用。存放各种并且数据较多的时候可以用字典。
1.2定义
在{}内用逗号隔开多个元素,每个元素都是key:value的格式,其中value是任意格式的数据类型,key具有描述性的作用,key通常是字符串类型
user_info = {'name': 'nick', 'gender': 'male', 'age': 19, 'company_info': ['oldboy', 'shanghai', 50]} print(id(user_info)) print(type(user_info)) print(user_info)
4396183344
<class 'dict'>
{'name': 'nick', 'gender': 'male', 'age': 19, 'company_info': ['oldboy', 'shanghai', 50]}
1.3.如何用
由于字典取值方式不再依赖于索引,而是依赖于key,通过key可以获取key对应的value值
字典套列表
user_info = {'name': 'nick', 'gender': 'male', 'age': 19, 'company_info': ['oldboy', 'shanghai', 50]} print(user_info['name']) print(user_info['company_info'][0])
nick
oldboy
字典套字典
user_info = {'name': 'nick', 'gender': 'male', 'age': 19, 'company_info': { 'c_name': 'oldboy', 'c_addr': 'shanghai', 'c_num_of_employee': 50}} print(user_info['name']) print(user_info['company_info']['c_name'])
nick
oldboy
-
练习
取出第二个学生的名字
student=[{'name':'ypp','age':'18'},{'name':wwb,'age':20} print(student[1]['name'])
wwb
12. 布尔类型
-
布尔值
1.1作用
用于判断条件结果
1.2定义
Ture,False通常不会直接引用,需要使用逻辑运算得到结果
1.3如何用
print(type(Ture))
<class 'bool'>
print(bool(0)) print(bool('nick')) print(bool(1 > 2)) print(bool(1 == 1))
False
True
False
True
注意:Python中所有数据类型的值自带布尔值。如此多的数据类型中只需要记住只有0、None、空、False的布尔值为False,其余的为True。
print(bool(0)) print(bool(None)) print(bool('')) print(bool([])) print(bool({})) print(bool(False))
结果是
False False False False False False
13. 解压缩
1. 定义
理解为:超市打包把多个商品放在一起,解压缩其实就是捷报把多个商品一次性拿出来
name_list = ['nick', 'egon', 'jason', ]
x, y, z = name_list
print(f'x:{x}, y:{y}, z:{z}')
x:nick, y:egon, z:jason
有时候可以下划线来屏蔽不想要的值
name_list = ['nick', 'egon', 'jason', 'tank']
x, y, z, a = name_list
x, _, z, _ = name_list # _相当于告诉计算机不要了,不能以_开头和结尾
x, y, *_, z = name_list
把字典解压缩的结果是字典的key
info = {'name': 'nick', 'age': 18}
x, y = info
print(x, y)
name age
14. python与用户交互
1. 为什么交互
当我们要在ATM取款时,输入密码输入金额,这种叫做交互。没有交互无法取款
2. 如何交互
info = {'name': 'nick', 'age': 18}
x, y = info
print(x, y)
3. python2的交互
name = raw_input('请输入你的姓名:')
pwd = raw_input('请输入你的密码:')
print(type(name)) # 'str'
print(type(pwd)) # 'str'
注意:py2的raw_input和py3的input是一样的
15. 格式化输出的三种方式
1. 占位符
占位符指的是%s(针对所有数据类型)、%d(仅仅针对数字类型)
age=20
sarlay=1500
print('我叫%s,年龄%s,工资%s'%(name,age,sarlay))
2. format格式化
name="ypp"
age=20
sarlay=1500
print('我叫{0},年龄{1},工资{2}'.format(name,age,sarlay))
注意:{}里面可以不填,可以填变量名,也可以写索引序号
3. f-String格式化
name="ypp"
age=20
sarlay=1500
print(f'我叫{name},年龄{age},工资{sarlay}')
16. 基本运算符
1. 算数运算符
加减乘除
2. 比较运算符
pwd = '123' print(pwd != '123')#False print(pwd == '123')#True
l1 = [1, 'a', 3] l2 = [1,'2'] print(l1 < l2)#列表同一个位置必须是同一个数据类型 False
3. 赋值运算符
age = 19
age = age + 1 #20
age *=10 #200
age /=2 #100
print(age)
4. 逻辑运算符
# 从左到右的方式找到逻辑运算符,找到逻辑运算符的左边,左边成立,再去找到逻辑运算符的右边
print(3 > 3 and 1 > 2 or 2 > 1) # True
5. 身份运算符
6. python运算符优先级
# Python中True为1,False为0
print(True > 0) # True
print(True > 2) # Flase
17. 流程控制之if判断
1. 语法
1.1 if
if 条件:
代码块
1.2 if ...else
if 条件:
代码块
else:
代码块
1.3 if...elif...else
if 条件1:
代码1
代码2
代码3
...
elif 条件2:
代码1
代码2
代码3
...
elif 条件3:
代码1
代码2
代码3
...
...
else:
代码1
代码2
代码3
...
2. if的嵌套
if 条件1: 条件1不成立则执行代码1 成立则执行if 条件1的代码块;
if 条件2: 条件2成立则执行代码块1,再执行代码1
代码块1
代码1
3. 练习
-
如果 成绩>=90,打印"优秀"
-
如果 成绩>=80 并且 成绩<90,打印"良好"
-
如果 成绩>=70 并且 成绩<80,打印"普通"
-
其他情况:打印"差"
score = input("your score: ") score = int(score) if score >= 90: print('优秀') # elif score >= 80 and score < 90: elif score >= 80: print('良好') # elif score >= 70 and score < 80: elif score >= 70: print('普通') else: print('差')
3.2练习
user_from_db = 'nick' pwd_from_db = 123 user_from_inp = input('username: ') user_from_inp = input('password: ') if user_from_inp == user_from_db and pwd_from_inp == pwd_from_db: print('login successful') else: print('username or password error')
username: nick
password: 123
username or password error
18. 流程控制之while
1. 语法
重复做同一件事。ATM验证失败的时候,会让我们重新输入密码账号,这个叫做while循环,又称为条件循环。
while 条件
code 1
code 2
code 3
...
while True:
print('*1'*100)
print('*2'*100)
# 实现ATM的输入密码重新输入的功能
while True:
user_db = 'nick'
pwd_db = '123'
inp_user = input('username: ')
inp_pwd = input('password: ')
if inp_user == user_db and pwd_db == inp_pwd:
print('login successful')
else:
print('username or password error')
上述代码虽然实现了功能,但是用户密码输对了,他也会继续输入
2. while+break
break的意思是终止掉当前层的循环,执行其他代码。
while True:
print('1')
print('2')
break
print('3')
1
2
上述代码的break毫无意义,循环的目的是为了让计算机和人一样工作,循环处理事情,而他直接打印1和2之后就退出循环了。而我们展示下有意义的while+break代码的组合。
while True:
user_db = 'nick'
pwd_db = '123'
inp_user = input('username: ')
inp_pwd = input('password: ')
if inp_user == user_db and pwd_db == inp_pwd:
print('login successful')
break
else:
print('username or password error')
print('退出了while循环')
username: nick
password: 123
login successful
退出了while循环
3. while+continue
continue的意思是终止本次循环,直接进入下一次循环
n = 1
while n < 4:
print(n)
n += 1
1
2
3
n = 1
while n < 10:
if n == 8:
# n += 1 # 如果注释这一行,则会进入死循环
continue
print(n)
n += 1
continue不能加在循环体的最后一步执行的代码,因为代码加上去毫无意义,如下所示的continue所在的位置就是毫无意义的。ps:注意是最后一步执行的代码,而不是最后一行。
while True:
if 条件1:
code1
code2
code3
...
else:
code1
code2
code3
...
continue
4. while循环的嵌套
# 退出内层循环的while循环嵌套
while True:
user_db = 'nick'
pwd_db = '123'
inp_user = input('username: ')
inp_pwd = input('password: ')
if inp_user == user_db and pwd_db == inp_pwd:
print('login successful')
while True:
cmd = input('请输入你需要的命令:')
if cmd == 'q':
break
print(f'{cmd} 功能执行')
else:
print('username or password error')
print('退出了while循环')
# 退出双层循环的while循环嵌套
while True:
user_db = 'nick'
pwd_db = '123'
inp_user = input('username: ')
inp_pwd = input('password: ')
if inp_user == user_db and pwd_db == inp_pwd:
print('login successful')
while True:
cmd = input('请输入你需要的命令:')
if cmd == 'q':
break
print(f'{cmd} 功能执行')
break
else:
print('username or password error')
print('退出了while循环')
5. tag循环控制退出
# tag控制循环退出
tag = True
while tag:
user_db = 'nick'
pwd_db = '123'
inp_user = input('username: ')
inp_pwd = input('password: ')
if inp_user == user_db and pwd_db == inp_pwd:
print('login successful')
while tag:
cmd = input('请输入你需要的命令:')
if cmd == 'q':
tag = False
print(f'{cmd} 功能执行')
else:
print('username or password error')
print('退出了while循环')
username: nick
password: 123
login successfu
6. while+else
while+else:else会在while没有被break时才会执行else中的代码
# while+else
n = 1
while n < 3:
print(n)
n += 1
else:
print('else会在while没有被break时才会执行else中的代码')
1
2
19. 流程控制之for循环
1. 语法
while 和for循环很类似,但区别在于:while容易死循环,是不可控的,for不容易进入死循环,是可控的
name_list = ['nick', 'jason', 'tank', 'sean']
n = 0
while n < 4:
# while n < len(name_list):
print(name_list[n])
n += 1
nick
jason
tank
sean
字典可能也有多个值的需求,字典可能有while无法使用的,可以用到for循环
info = {'name': 'nick', 'age': 19}
for item in info:
# 取出info的keys
print(item)
注意:字典for循环的是key键
ame_list = ['nick', 'jason', 'tank', 'sean']
for item in name_list:
print(item)
nick
jason
tank
sean
之所以for是可控的,是因为容器类型的长度是有限的,但while的循环需要自己控制,for循环也可以按照索引取值
print(list(range(1, 10)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(1, 10): # range顾头不顾尾
print(i)
1
2
3
4
5
6
7
8
9
# for循环按照索引取值
name_list = ['nick', 'jason', 'tank', 'sean']
# for i in range(5): # 5是数的
for i in range(len(name_list)):
print(i, name_list[i])
0 nick
1 jason
2 tank
3 sean
2. for+break
# for+break
name_list = ['nick', 'jason', 'tank', 'sean']
for name in name_list:
if name == 'jason':
break
print(name)
nick
3. for+continue
or循环调出本次循环,进入下一次循环
# for+continue
name_list = ['nick', 'jason', 'tank', 'sean']
for name in name_list:
if name == 'jason':
continue
print(name)
nick
tank
sean
4. for循环嵌套
# for循环嵌套
for i in range(3):
print(f'-----:{i}')
for j in range(2):
print(f'*****:{j}')
-----:0
*****:0
*****:1
-----:1
*****:0
*****:1
-----:2
*****:0
*****:1
5. for+else
# for+else
name_list = ['nick', 'jason', 'tank', 'sean']
for name in name_list:
print(name)
else:
print('for循环没有被break中断掉')
nick
jason
tank
sean
for循环没有break中断掉
6. for+循环实现loading
#只能用于jupyter notebook
import time
print('Loading', end='')
for i in range(6):
print(".", end='')
time.sleep(0.2)