Python基础入门
1. 代码的编码&注释
1.1 编码
1)编码概述
计算机中所有的数据本质上都是以0和1的组合来存储的,编码类似于一个密码本,为文字和0/1的组合提供对应关系。
在文件保存时会根据编码的对应关系找到其对应的0/1写入到硬盘文件中,一般在文件保存时会让用户选择以某种编码保存。
计算机中有很多种编码方式,如gbk和utf-8,每种编码都有自己的一套对应关系,用不同的编码保存文件时,硬盘中存储的0/1组合也是不同的。
保存文件使用某种编码,打开文件就必须使用同样的编码,否则就会乱码。
2)ASCII码
ASCII码只能支持 符号、字母、数字。且用8位来表示一个字符。8位表示一个字节(1Byte=8bit)
ASCII码中的最开头都是0,是最初为了以后扩展而准备的。
ASCII码表中有256个对应关系(0到255)
- 0表示NULL
- ASCII码中的0~9指的是字符串"1"、"2"、... "9"与二进制的对应关系
3)unicode字符集
为了支持其他所有国家的文字,就弄出了万国码unicode
编码和字符集:
- ASCII编码,直接是字符和二进制的对照表,此二进制可在计算机中用于内存计算、硬盘存储、网络传输等
- unicode字符集,是字符和码位的对应关系,码位本质上也是二进制,此二进制可在计算机中用于内存计算,但一般不会做硬盘存储和网络传输
- utf-8编码:是对unicode字符集的码位进行转换处理得到的二进制,此二级制可用于内存计算、硬盘存储、网络传输等
unicode字符集:
- 现在unicode使用4个字节来表示所有字符,即ucs4
- ucs4其实是对ucs2的一个扩展,ucs4默认使用4个字节表示码位,而ucs2用2个字节表示码位
- ucs4会在ucs2表示的码位前加0,即:
ucs2:01101011 01100110
变为ucs4:00000000 00000000 01101011 01100110
ucs4的优缺点:
- 缺点:因为都使用4个字节,同样的字符的码位会更占空间;所以在网络传输、硬盘存储时会把unicode字符集的码位转为(压缩)成utf-8等编码的二进制再进行传输和硬盘存储
- 优点:可以表示所有字符并且长度固定4字节,方便内存中进行数据计算
4)utf-8编码
utf-8编码其实就是对unicode字符集的码位进行压缩加工处理得到的,把二进制码位中不必要的位去掉。
utf-8是为unicode编码设计的一种在存储和传输时节省空间的编码方案,使用1、2、3、4个字节表示所有字符,优先使用1个字符、无法满足则使增加一个字节,最多4个字节。
utf-8是一套以8位为一个编码单位的可变长编码,会将一个码位编码为1到4个字节。
1.2 指定编码&注释
1)Py中指定代码的编码
代码文件顶部指定编码方式:(必须在首行顶格写)
# -*- coding:utf-8 -*-
写好代码后,以对应的编码规则保存(默认是以utf-8编码保存),然后Python解释器运行代码文件(使用utf-8编码去打开并运行代码)。
2)注释
- 单行注释
# 单行注释,解释器忽略此行,不按照代码去解释此行代码 name = 'hgzero'
- 多行注释
""" 注释多行,三引号括起来的内容解释器会忽略 """ print("傻×")
2. 数据类型
2.1 int(整型)
整型表示数学中的整数,在Py中称为整型,支持 加、减、乘、除、取余、指数 等操作。
# 创建整型 666,并使用并使用print输出 print(666) # 计算 2 加 10 的结果,并使用print输出 print(2+10) # 计算 2 乘以 10 的结果,并使用print输出 print(2*10) # 计算 10 除以 2 的结果,并使用print输出 print(10/2) # 计算 10 除以 3 得的余数,并使用print输出 print(10%2) # 计算 2 的 4 次方,并使用print输出 print(2**4)
2.2 str(字符型)
字符型就是表示字符串,如姓名、地址等。字符串必须用引号引起来。
字符串支持字符串的 加、乘:
- 加:字符串的拼接,要求字符串只能和字符串拼接
- 乘:让此字符串重复出现多少次,要求必须是整型和字符串相乘
print("我是你爸") # 字符串相加(字符串只能拼接字符串,不能拼接其他类型) print("不好意思," + "我依然是你爸") # 将这两段字符串拼接起来 # 字符串相乘 print("快叫爸爸" * 9) # 将此字符串重复9次
2.3 bool(布尔型)
bool值表示某种判断所得到的 真、假。
bool值只能有两个值:True / False。
# 判断1是否大于2,如果是则为True,否则即为False,print输出True或者False print(1>2) # 判断整数89是否等于64,print输出True或者False print(89 == 64) # 判断字符串"2b"是否等于"傻狗",print输出True或者False print("2b" == "傻狗")
2.4 类型转换
不同的数据类型都有不同的功能,但可以将其进行类型转换。
1)转换为整型
只有“数字”格式的字符串才能转换为整型。
# 将“数字”格式的字符串转换为整型 print( int("89") + int("64")) # 将布尔值转换为整数类型 print(int(True)) # 输出 1 print(int(False) # 输出 0
2)转换为字符串
# 将整型转换为字符串 print( str(666)+str(999) ) # 将布尔值转换为字符串 print( str(True) ) # 得到字符串True print( str(False) ) # 得到字符串False
3)转换为布尔值
整型转换为布尔值时,只有0转换为False,其他均为True。
字符串转换为布尔值时,只有空字符为False,其他均为True。
3. 输出&输入&字符串格式化
3.1 输出
print用于将代码的结果输出到终端设备(标准输出)。
print在输出时默认会在结尾换行,因为默认定义了 end="\n"
- 不换行,加入
end=""
表示print结束时不再加\n
而换成空
# -*- coding: utf-8 -*- print("俄爹虐你千百遍, ", end="") print("你待俄爹如初恋, ", end="") print("一句卧槽怎奈何. ", end="\n") # 默认就是end="\n" print("root", "passwd", "uid", "gid", sep=":") # 以 :对前面的各个字符串片段进行拼接
3.2 输入
input用于实现用户交互。input输出的内容是字符串类型,即使输出了数字它也是字符型。
name = input("请输入用户名:") # 这里的字符串为打印到屏幕上的内容,用户输出的结果会被赋值给name变量 print(name) # 打印name变量,是一个字符型 print("现在进行加法运算") num1 = input("请输入第一个数字:") num2 = input("请输入第二个数字:") value = int(num1) + int(num2) print(value)
3.3 字符串格式化
一般称字符串中的%s叫占位符,而占位符被替换的过程叫字符串格式化。
在字符串格式化时,如果想要输出%,则必须写两个%%才能正确输出%
1)常用的字符串格式化方法
# 最常用的字符串格式化 like = "my name is %s ,and my age is %d" % ("hgzerowzh", 21) print(like) print("welcome to %s" % "China") print("the num is %.2f" % 9.1358567) # 百分号后面的.2f表示浮点数保留小数点后两位小数,并进行四舍五入 # 字典形式的字符串格式化 print("my name is %(name)s, and the age is %(age)d" % {"name": "hgzerowzh", "age": 21})
2)两种format的字符串格式化
my_name = "my name is {name},and age is {age}" print(my_name.format(name="hgzero", age=21)) # 有两种给format传值的方式 print(my_name.format(**{"name": "hg", "age": 23})) # 可传入字典或列表,列表用*[] , 列表用**{} print(my_name.format_map({"name": "wuzhihao", "age": 22})) # 这种字符串格式化需要传入字典的形式
4. 变量
4.1 变量和变量名
1)变量
变量就类似于别名和外号,可以通过变量名来操作其对应的值。
格式:【变量名 = 值】
name = "shit" age = 70 test = 6 > 4 address = "ccp" + name
2)变量名
变量名的命名规则:
- 只有由 字母、数字、下换下 组成
- 不能由数字开头
- 不能是Python的内置关键字
建议的命名方式:
# 下划线命名方式 your_father = "me" my_son = "you" # 驼峰式命名方式 yourFather = "hgzero" mySon = "ccp"
4.2 内存指向
无人指向的数据会被标记为垃圾,由解释器自动化回收。
name = "hgzero" # 创建一块区域保存字符串"hgzero",然后将name指向这块区域 new_name = name # new_name会指向name所指向的那块内存区域 name = "hgzerowzh" # 让name改为指向"hgzerowzh"的那块区域 num = 18 age = str(num) # num会指向整数18的那块空间,age会另外再开辟一片空间来存放字符串
5. 条件语句
5.1 基本条件语句
if 和 else 下面的代码都需要相同的缩进(一般为4个空格)
username = "ccp" password = "20204" if username == "ccp" and password == "20204": print("恭喜你,登录成功") else: print("登录失败")
5.2 多条件判断
1)格式
if 条件A: 条件A成立则执行此处代码 elif 条件B: 条件A不成立,条件B成立,则执行此处代码 elif 条件C: 条件A/B都不成立,条件C成立,则执行此处代码 ... else: 以上条件都不成立,则执行此处代码(如果没有功能,也可以把else省略)
2)示例
num = input("请输入数字") data = int(num) if data > 6: print("太大了") elif data == 6: print("刚刚好") else: print("太小了")
5.3 条件语句嵌套
if 条件A: if 条件B : 写代码... else: 写代码... elif 条件C: 写代码... else: if 条件D: 写代码...
6. 循环语句
6.1 while循环
1)基本格式
while 条件: ... ... 可能有很多行码(这种在while缩进里面的代码统称循环体)
2)while ... else ... 语句
当while正常的结束,就会执行else中的代码;如果while语句被break强行退出,则不会执行else
# 这段代码中的else语句就不会被执行 count = 0 while count <= 5: print('loop', count) if count == 3: break count += 1 else: print('loop is done...') print('out of loop')
3)示例
print("开始") flag = True while flag: print("朕,一统天下。") flag = False print("结束") print("开始") num = 1 while num < 5: print("我一直是你爸") num = num + 1 print("结束")
6.2 break & continue 关键字
1)break
break只能出现在循环体中,用于终止循环。
循环体一旦遇到break,则立即终止循环,从break的位置直接跳出循环,去执行循环语句之后的代码。
print("开始") i = 1 while True: print(i) i = i + 1 if i == 101: break print("结束")
2)continue
continue用于结束本次循环,开始下一次循环。
在循环体中遇到continue之后,本次循环不再执行continue下面的代码,直接回到while条件判断的位置,开始下一次循环。
print("开始") i = 1 while True: if i == 7: i = i + 1 continue print(i) i = i + 1 if i == 101: break print("结束")
7. 运算符
7.1 运算符的种类
1)算术运算符(如:加减乘除)
2)比较运算符(如:大于、小于)
3)赋值运算符(如:变量赋值)
4)成员运算符(如:是否包含)
5)逻辑运算符(如:且、非)
7.2 逻辑运算
1)规律
- or:看第一个值,如果是“真”,则选择第一个值;否则选择第二个值
- and:看第一个值,如果是“假”,则选择第一个值;否则选择第二个值
v1 = 4 and 8 v2 = 0 and 6 v3 = -1 and 88 v4 = "" and 7 v5 = "shit" and "" v6 = "" and 0 v7 = 0 and "fuck" print(v1,v2,v3,v4,v5,v6,v7) 结果:8 0 88 0
2)示例
遵循的优先级:先处理and再处理or
v1 = 1 and 6 or 8 and 0 or ""
# 结果:v1 = 6 # 流程分析: # 第一步:处理 1 and 6,得到 v1 = 6 or 8 and 0 or "" # 第二步:处理 8 and 0,得到 v1 = 6 or 0 or "" # 第三步:处理 6 or 0 ,得到 v1 = 6 or "" # 第四步:处理 6 or "",得到 6
7.3 运算符优先级
算术运算符 > 比较运算符 > 逻辑运算符(not > and > or)