1. Python语法
1.1 编码
-
使用工具写汉字、字母、数字,写完之后,你是需要保存到硬盘上
卢慧yyds666 01010101010101101010101001010101000111101
-
一套编码(密码本)UTF-8
卢 100000011100101 慧 111111100000001 y 111111110000001 d 111111101000001 s 111111100010001 6 111111100000101
-
用软件去打开 user.txt
卢 100000011100101 慧 111111100000001 y 111111110000001 d 111111101000001 s 111111100010001 6 111111100000101
卢慧yyds666
在计算机中不止有一套编码(密码文)
以后在写文件时,一定要记住自己文件保存时,用的是什么编码,以后再打开这个文件时,就需要用同样的编码去打开,否则,就会出现乱码的情况
在Python开发过程中这种规则依然要遵循:
-
在文件中写python代码(我们以后要以utf-8编码去保存代码)
print("Hello World")
-
python解释器打开代码并读取文件内容,转换成计算机能够识别的语言
Python解释器会打开咱们的文件 默认:Python3.x版本解释器,默认会使用utf-8编码去打开文件 >>>C:\python39\python.exe D:\code\first.py
1.2 输出
让程序在内部帮助我们做事,做完事之后将结果输出出来
print("你好呀")
print("欢迎使用xxx系统")
例如:找到某个目录下所有的以为 .png 为结尾的文件
import os
for item in os.listdir("/Users/wupeiqi/PycharmProjects/gx_day01"):
if item.endswith('png'):
print(item)
-
输出的基本用法
print("郭德纲")
-
不要换行
print("伤情最是晚凉天", end="") print("憔悴私人不堪言", end="")
1.3 数据类型
什么是数据类型?学了他有什么用?
- 字母、数字、汉字、成语、文言文; 基于这些知识写文件/作文 --> 老师批改。【学中文经验】
- 本文、数字、真假。。。 ; 基于数据类型写代码文件 --> 计算运行。 【学编程语言】
1.3.1 整型(int)
表示我们生活中的数字,例如:19、180、150
19
20
300
300 + 19
2 * 6
80 - 77
100 / 10
98 % 10
print(19)
print(300 + 19 )
1.3.2 字符串(str)
用来表示我们生活中的本文信息,例如:"李国良" "中国北京昌平区"
# 单行文本
"毛谦"
'李国良'
# 多行文本
"""陈丽萍"""
'''梁吉宁'''
print("毛谦")
print('毛谦')
字符串之间可以进行相加,就是字符串拼接。
"李国良" + "yyds"
"李国良yyds"
字符串和数字相乘,等到的就是让字符串重复多少次
"毛谦" * 3
"毛谦毛谦毛谦"
转换
str(19) # 19 -> "19"
int("88") # "88" -> 88
int("广西联通") # 无法转换,报错
1.3.3 布尔类型(bool)
- 真 True
- 假 False
1 > 2 -> False
1 == 2 -> False
"梁吉宁" == "陈青" -> False
22 == 22 -> True
整型、字符串类型 -> 布尔值
-
整型, 0转换为布尔值为False,其他均为True
print( bool(0) ) # False print( bool(-1) ) # True print( bool(100) ) # True
-
字符串,空字符串转换为布尔值为False,其他均为True
print( bool("") ) # False print( bool("s") ) # True print( bool(" ") ) # True
1.4 变量
变量,就是我们给某个值取名称/外号
格式:变量名 = 值
addr = "中国北京市昌平区沙河镇xxx校区1号楼3单元909"
print(addr)
print(addr)
print(addr)
print(addr)
age = 18
name = "邓新成"
is_success = 1 > 19 # False
addr = "中国北京" + "沙河"
address = "中国北京" + "海淀区" + name # "中国北京海淀区邓新成"
result = 1 == 2 # False
print(result)
1.4.1 规范
name = "吴国凤"
-
变量名中只能包含:字母、数字、下划线
-
不能以数字开头
-
不能使用Python内置的关键字
[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
1.4.2 变量的内存指向
通过学习上述变量知识让我们对变量了有了初步认识,接下来我们就要从稍稍高级一些的角度来学习变量,即:内存指向(在电脑的内存中是怎么存储的)
情景一
name = "wupeiqi"
在计算机的内存中创建一块区域保存字符串”wupeiqi”,name变量名则指向这块区域
情景二
name = "wupeiqi"
name = "Alex"
在计算机的内存中创建一块区域保存字符串”wupeiqi”,name变量名则指向这块区域。然后又再内存中创建了一块域保存字符串”alex”,name变量名则指向”alex”所在的区域,不再指向”wupeiqi”所在区域(无人指向的数据会被标记为垃圾,由解释器自动化回收)
情景三
name = "wupeiqi"
new_name = name
在计算机的内存中创建一块区域保存字符串”wupeiqi”,name变量名则指向这块区域。new_name变量名指向name变量,因为被指向的是变量名,所以自动会转指向到name变量代表的内存区域
情景四
name = "wupeiqi"
new_name = name
name = "alex"
在计算机的内存中创建一块区域保存字符串”wupeiqi”,name变量名则指向这块区域(灰色线), 然后new_name指向name所指向的内存区域,最后又创建了一块区域存放”alex”,让name变量指向”alex”所在区域
情景五
num = 18
age = str(num)
在计算机的内存中创建一块区域保存整型18,name变量名则指向这块区域。通过类型转换依据整型18再在内存中创建一个字符串”18”, age变量指向保存这个字符串的内存区域
至此,关于变量的内存相关的说明已讲完,由于大家都是初学者,关于变量的内存管理目前只需了解以上知识点即可,更多关于内存管理、垃圾回收、驻留机制等问题在后面的课程中会讲解
1.5 注释
让Python解释器看到之后,自动忽略的代码
-
单行注释
# 注释内容 快捷键: - win:control + ? - mac:commond + ?
-
多行注释
""" 注释的内容 ... .. """
1.6 输入
为什么要有输入呢?
text = input("提示信息")
print(text)
v1 = input("请输入数字:") # "100"
v2 = input("请输入数字:") # "200"
result = v1 + v2
print(result) # "100200"
v1 = input("请输入数字:") # "100"
v2 = input("请输入数字:") # "200"
result = int(v1) + int(v2)
print(result) # 300
2. 条件语句
2.1 基本条件
if 条件:
pass
else:
pass
num = 1
if num > 9:
print(123)
print(456)
else:
print(666)
print(999)
username = input(">>>")
password = input(">>>")
if username == "admin" and password == "123":
print("成功")
else:
print("失败")
2.2 多条件
if 条件A:
条件A成立,。。
。。。
。。。
elif 条件B:
条件A不成立,条件B
。。
。。
elif 条件C:
C成立
...
...
else:
上述都不成立
# 猜数字
num = input("请猜数字,猜对赠送500w,请开始:")
data = int(num)
if data > 66:
print("太大了")
elif data < 66:
print("太小了")
else:
print("恭喜你获得500w")
提示:所有的条件中的else可以省略
if True:
pass
if 条件A:
pass
elif 条件B:
pass
2.3 嵌套
if 条件A:
if 条件:
if xx:
pass
else:
pass
else:
pass
elif 条件B:
pass
模拟:联通10010客服
print("欢迎致电10010,提供以下服务:1.话费业务;2.宽带业务;3.企业业务;4.人工服务")
choice = input("请选择序号:")
if choice == "1":
print("话费业务专区")
print("1.查询话费;2.缴话费;3.话费异常")
second_choice = input("请输入:")
if second_choice == "1":
print("话费查询")
print("你的话费余额是100w")
elif second_choice == "2":
print("成功缴费100元")
elif second_choice == "3":
print("....")
print("....")
else:
print("输入错误")
print("END")
elif choide = "2":
print("宽带业务专区")
print("宽带业务专区")
print("宽带业务专区")
print("宽带业务专区")
print("宽带业务专区")
elif choide = "3":
print("企业业务")
elif choide = "4":
print("人工服务专区")
print("感谢您的来电,再见。")
3. while循环
print("开始")
while 条件 :
...
..
...
print("结束")
3.1 循环基本使用
示例1:
print("开始")
while True:
print("乔杉喜欢大保健")
print("代言人")
print("结束")
# 输出:
开始
乔杉喜欢大保健
代言人
乔杉喜欢大保健
代言人
乔杉喜欢大保健
代言人
...
示例2:
print("开始")
while 1 > 2:
print("123")
print("结束")
# 输出
开始
结束
示例3:
num = 1
print("开始")
while num > 2:
print("123")
print("结束")
# 输出
开始
结束
示例4:
num = True
print("开始")
while num:
print("123")
num = False
print("结束")
# 输出
开始
123
结束
示例5:
print("开始")
num = 1
while num < 3:
print("123")
num = 5
print("结束")
# 输出
开始
123
结束
示例6:
print("开始")
num = 1
while num < 3:
print("123")
num = num + 1 # num=2 num=3
print("结束")
# 输出
开始
123
123
结束
练习题
-
猜数字,给他三次机会
print("开始") count = 1 while count <= 3: num_string = input("请输入你要猜的数字:") num = int(num_string) if num > 66: print("大了") elif num < 66: print("小了") else: print("正确") count = 100 count = count + 1 print("结束")
-
猜数字,一直猜,指导猜对为止
print("开始") count = 1 while count == 1: num_string = input("请输入你要猜的数字:") num = int(num_string) if num > 66: print("大了") elif num < 66: print("小了") else: print("正确") count = 100 print("结束")
print("开始") flag = True while flag: num_string = input("请输入你要猜的数字:") num = int(num_string) if num > 66: print("大了") elif num < 66: print("小了") else: print("正确") flag = False print("结束")
3.2 break
break不能自己独立使用,只能放在循环的内部
break,立即终止循环(从循环中跳出来)
print("开始")
while True:
print("中国联通")
break
print(123)
print("结束")
# 输出
开始
中国联通
结束
print("开始")
while True:
print("中国联通")
if 1 == 1:
break
print(123)
print("结束")
# 输出
开始
中国联通
结束
print("开始")
while True:
print("中国联通")
if 1 > 1:
break
print(123)
print("结束")
# 输出
开始
中国联通
123
中国联通
123
中国联通
123
...
猜数字,一直猜,指导猜对为止
print("开始")
while True:
num_string = input("请输入你要猜的数字:")
num = int(num_string)
if num > 66:
print("大了")
elif num < 66:
print("小了")
else:
print("正确")
break
print("结束")
3.3 continue
continue不能自己独立使用,只能放在循环的内部
continue,立即结束当前循环,开始下次循环
print("开始")
while True:
print(1)
continue
print(2)
print("结束")
# 输出
开始
1
1
1
1
1
...
案例:输出 1 ~ 10,不要7
count = 1
while count < 11:
if count == 7:
continue
print(count)
count = count + 1
# 输入?
1
2
3
4
5
6
count = 1
while count < 11:
if count == 7:
continue
count = count + 1
print(count)
count = count + 1
# 输入?
1
2
3
4
5
6
count = 1
while count < 11:
if count == 7:
count = count + 1
continue
print(count)
count = count + 1
# 输入
1
2
3
4
5
6
8
9
10
4. 字符串格式化
4.1 format(推荐)
text = "我的名字叫{0}今年{1}岁".format("武沛齐",18)
print(text) # "我的名字叫武沛齐今年18岁"
text = "我的名字叫{0}今年{1}岁,就是{0}".format("武沛齐",18)
print(text) # "我的名字叫武沛齐今年18岁,就是武沛齐"
text = "我的名字叫{}今年{}岁,就是{}".format("武沛齐",18,"武沛齐")
print(text)
tpl = "我的名字叫{},今年{}岁。"
v1 = tpl.format("武沛齐",18) # 我的名字叫武沛齐,今年18岁。
v2 = tpl.format("邱恩婷",17) # 我的名字叫邱恩婷,今年17岁。
注意:
text = "我的名字叫{n1}今年{xx}岁,就是{p2}".format(n1="武沛齐",p2=18,xx="武沛齐")
print(text)
4.2 %
text = "我的名字叫%s今年%d岁" %("武沛齐",18)
print(text) # "我的名字叫武沛齐今年18岁"
tpl = "我的名字叫%s,今年%d岁。"
v1 = tpl %("武沛齐",11)
v2 = tpl %("谢鹏",12)
4.3 f-string
Python3.6+之后才有的另外一种格式化
name = "武沛齐"
age = 18
text = f"我的名字{name},今年{age}岁"
print(text)
5. 运算符
-
算数运算符
value = 9 % 2 print(value) # 1
-
比较运算符
> >= < <= == !=
-
赋值运算
v1 = 123
num = 10 num = num + 2 # num += 2
num = 10 num = num - 2 # num -= 2
count = 1 while count<11: print(count) count = count + 1 # count += 1
count = 10 while count > 0: print(count) count = count - 1 # count -= 1
-
成员运算,xx中是否xx
v1 = "日本" in "日本人不是人" # True v2 = "俄罗斯" in "日本人不是人" # False
text = "日本人不是人" v3 = "日本" in text # True
text = input("请输入你的评论:") if "日本" in text: print("不能包含不是人的信息") else: print(text)
text = input("请输入你的评论:") if "日本" not in text: print(text) else: print("不能包含不是人的信息")
-
逻辑运算
v1 = True and True # True v2 = True and False # False
user = input(">>>") pwd = input(">>>") if user == "root" and pwd == "123": print("成功") else: print("失败")
关于逻辑运算符的特别应用:
-
一般
# v1 = 条件 and/or 条件 v1 = user == "root" and pwd == "123"
-
高级用法(很少写,面试题+源码)
v1 = 值 and/or 值
v1 = 2 and 4 print(v1) """ 值 and 值 逻辑运算的结果取决于那个值?结果等于值。 v1 = 2 and 4 """
v1 = 6 and 9 # 9 v2 = 0 and 1 # 0 v3 = 88 and 0 # 0 v4 = "" and 9 # "" v5 = "梁伟" and "罗小春" # "罗小春" v6 = 1 or 2 # 1 v7 = 0 or 2 # 2 # 先分析and,or v8 = 1 and 8 or 9 and 10 or 11 or 12 and 0 or "" and "卢慧"
name = 19 if bool(name): v1 = name else: v1 = 666
name = 19 v1 = name or 666
6. 基础概念
6.1 进制
计算机底层全都都是 0101010101010 (二进制)
0
1
10
11
100
武 100010000010000111100011
转换:
-
十进制 -> 其他进制
v1 = bin(238) print(v1) "0b11101110" v2 = oct(238) print(v2) # "0o356" v3 = hex(238) print(v3) # "0xee"
-
其他进制,转换成十进制整数
d1 = int("0b11101110", base=2) print(d1) # 238 d2 = int("0o356", base=8) print(d2) # 238 d3 = int("0xee", base=16) print(d3) # 238
6.2 计算机中的单位
内存:8G、硬盘:1T、流量:300M
计算机底层本质上都是010101010,计算机中为了方便表示搞了一些单位
10001111 10001111 10001111 10001111 10001111
-
b(bit),位
0 1位 1 1位 100 3位
-
B(byte),字节
8位是一个字节。 10001111 1个字节 10001111 10001111 2个字节
-
KB(kilobyte),千字节
1024个字节就是1KB(千字节)。 10010110 11010110 10010111 .. ,1KB 1KB = 1024B= 1024 * 8 b
-
M(Megabyte),兆 -> 8388608
1024KB就是1M 1M= 1024KB = 1024 * 1024 B = 1024 * 1024 * 8 b
-
G(Gigabyte),千兆
1024M就是1G 1 G= 1024 M= 1024 *1024KB = 1024 * 1024 * 1024 B = 1024 * 1024 * 1024 * 8 b
-
T(Terabyte),万亿字节
1024个G就是1T
-
...其他更大单位 PB/EB/ZB/YB/BB/NB/DB 不再赘述
假设:
-
办理:1G套餐(1024 * 1024 * 1024 * 8)
-
密码文:
武 10110011 10110011 -> 16位表示1个中文字符串
6.3 编码
咱们的电脑,存储和发送文件,发送的是什么?电脑里面是不是有成千上万个二极管,亮的代表是1,不亮的代表是0,这样实际上电脑的存储和发送是不是都是010101啊
我们发送的内容都是010101010这样写的内容比较多就不知道是什么了,所以我们想要明确的区分出来发送的内容就需要在某个地方进行分段.计算机中设定的就是8位一断句
6.3.1 ascii编码
计算机:
储存文件,或者是传输文件,实际上是010101010
计算机创建初期是7位一段,但是发明者说为了拓展留出一位,这样就是8位一段句。8位有多少种可能? 256
最开始的编码,只是照顾了美国
在ascii编码中是用1个字节来表示二进制,所以他只能有256中可能
NUL 00000000
...
@ 01000000
...
H 01001000
...
ÿ 11111111
随着计算机的发展. 以及普及率的提高. 流⾏到欧洲和亚洲. 这时ASCII码就不合适了. 比如: 中⽂汉字有几万个. 而ASCII 多也就256个位置. 所以ASCII不行了. 怎么办呢?
这时, 不同的国家就提出了不同的编码用来适用于各自的语言环境. 比如, 中国的GBK, GB2312, BIG5, ISO-8859-1等等
6.3.2 gbk和gb2312
GBK, 中⽂国标码,⾥⾯包含了ASCII编码和中⽂常⽤编码. 16个bit, 2个byte
GB-2312,国家信息委员会制作(1980年)
GBK,GB-2312的扩展,包含了中日韩等文字。(1995)
6.3.3 unicode(万国码)
随着全球化的普及,发展到欧洲,亚洲等国家,发现这些根本不够用,所以创建了万国码,⾥⾯包含了全世界所有国家⽂字的编码. 32个bit, 4个byte, 包含了 ASCII
- ucs2,用固定的2个字节去表示二进制和文字的对应关系。 2**16 = 65535
- ucs4,用固定的4个字节去表示二进制和文字的对应关系。 2**32 = 4294967296
文字 二进制
且 01001110 00010100 ucs2
且 00000000 00000000 01001110 00010100 ucs4
文字 二进制 十六进制
༃ 1001010101010101010 0F03
缺点,固定都用4个字节去存储文字对应的二进制 -> 浪费空间/浪费流量
6.3.4 utf-8编码
对unicode进行压缩,用尽可能少的自己来表示数据
最⼩字符占8位
-
英⽂: 8bit 1byte
-
欧洲⽂字:16bit 2byte
-
中⽂:24bit 3byte
注意事项:
- 以后开发时,一定要使用utf-8编码。
- UTF-8编码中,1个中文用3个字节来表示。
6.3.5 Python
name = "武沛齐" # 字符串类型,unicode来存储(ucs4)。
data = name.encode('utf-8') # 字节类型, utf-8编码来存储
print(data)
在Python开发中,以后再去做文件存储或网络传输时,不能直接用字符串,而是需要将字符串压缩成utf-8编码的字节,然后再来传输和存储
# 在文件中写入一个字符串
name = "武沛齐"
# 1.打开文件
file_object = open("vip.txt",mode='ab')
# 2.写入内容
file_object.write( name.encode('utf-8') )
# 3.关闭文件
file_object.close()
-
文件编码
-
写文件,写了很多的文本的内容 -> 按照某种编码去存储文件 ( 010100101010 )
-
读文件,真正的内容读取出来,用同样的编码才能读取到文本内容
Python解释器编码,指的是打开和读取某个py文件的内容时,用的是这种编码。 utf-8
-
-
Python解释器将代码读取到内存之后,是需要进行:
-
语法分析 & 词法分析
name = "武沛齐" -> 字符串处理,去unicode对应关系中找 01010101010
-