python注释
注释作用:
帮助我们自己理清楚代码逻辑
与别人合作开发,添加注释,可以减少沟通成本
开发模块的时候添加注释可以减少他人使用成本
可以临时注释一段代码,方便调试,定位出错的代码行
注释的分类:
#是单行注释
‘’‘xxx’’'是多行注释
“”“xxx”""是多行注释
python的中文乱码
文本<—->存储器中
计算机的存储器:一个比特是计算机最小表示信息,只存储0/1
一个字节是计算机基本的存储单元,即使只是存储一个1值必须最小要占用一个字节。
字符—>存储器(编码)存储器—>字符(解码)
字符—>数字—>存储器
字符编码(ASCII编码/其他)
1、按照这样的规范把字符转换成数字?
2、按照怎样的方式存储数字?(用多少个字节)
- 当字符编码对应的数字不同时,解码使用不同字符编码规范进行解码的时候会出现乱码
- 当字符编码对应的数字相同时,解码使用不同存储数字方式,会产生错位,进行解码的时候也会出现乱码
常见的字符编码
-ASCII/ANSI:
ASCII可以简单理解为用于表述英文文字的编码。ANSI是ASCII的扩展,除英文外还可以表示拉丁文。
-GB2312/GBK/GB18030:
GB既国标,是中国自己的编码方案,目的当然是为了描述汉字(下文我们统称 其为GB系列)。其中,GB2312是对ASCII的中文扩展,GBK和GB18030的涵盖了GB2312的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 - Unicode:
中国有自己的编码标准,其他国家也有自己的一套规范,而且相互之间互不支持,为了解决这一现象,国际标谁化组织提出了统一的标准编码准则Unicode ,其中python3是Unicode 。每个字符都有对应的唯一字符码,但是针对每个字符码使用几个字节存储的问题,又存在几个不同的解决方案,utf-8,utf-16,utf-32等。
使用utf-8编码的数据只能通过utf-8进行解码,使用GB编码的数据也只能使用GB来解码,既解码与编码的规范要一致,否则就会出错。
Python3中的编码与解码
Python3中有两种数据类型:str和bytes。str类型存储unicode数据,用于向人展示数据,既我们所说的明文。bytes类型用于存储字节数据,用于计算机存储和传输。明文(str)和字节(bytes)数据之间的转换关系就是编码和解码,从str到bytes叫编码,用encode命令,从bytes到str叫解码,用decode命令。需要注意的是,str数据无法进一步decode,bytes数据也无法进一步encode。
python变量
什么是变量
变量是一个存储数据得容器
变量特性:引用者某个具体的数值 可以改变这个引用
定义变量
# 变量赋值三种方式
# 方式一 变量名 = 值
a = 1 #在内存里面分配一块空间存储1,再把空间的唯一标识给变量a
print(a)
# 方式一 变量名1,变量名2 = 值1,值2
a, b = 1, 2
print(a, b)
# 方式一 变量名1 = 变量名2 = 值
a = b = 8
print(a, b)
为什么会产生变量
- 变量产生,便于代码维护,节省空间方便维护
# ctrl+D快速复制
print(8+1)
print(8+2)
print(8+3)
print(8+4)
print(8+5)
# ctrl+R快速替换 ctrl+/ 单行注释
num = 8 # 变量产生,便于代码维护,节省空间 8—>10
print(num+1)
print(num+2)
print(num+3)
print(num+4)
print(num+5)
- 变量产生,节省空间(磁盘+内存)
# 变量产生,节省空间(磁盘+内存)
# 打印8遍“烦烦烦,哈哈哈 1”
name ="烦烦烦,哈哈哈" # 只有一份实际存储 "烦烦烦,哈哈哈"
print(name+"1")
print(name+"2")
print(name+"3")
print(name+"4")
print(name+"5")
print(name+"6")
print(name+"7")
print(name+"8")
变量注意事项
一个变量只能引用一个数值
命名规范:字母数字下划线、见名知意、驼峰标识、非关键字、区分大小写
变量名使用之前一定要赋值
python数据类型-类型转换
什么是数据类型
对程序处理的数据进行相关分类
为什么区分数据类型
- 区分存储空间,根据不同的数据类型,分配不同的存储空间
- 根据不同的数据类型,做出不同的数据处理 6+6 vs “6”+“6”
数据类型
常用数据类型:
- Number(数值类型)int long float complex
- Bool( ture false)
-String(‘abc’ “abc” ‘’‘abc’’’ “”“abc”"") - List Set Tuple Dictory NoneType
print(type(6)) # 查看数据类型 <class 'int'>
print(type("54")) # 查看数据类型 <class 'str'>
数据类型转换
- 数据类型转换,不同数据类型之间不能计算,具体转换可以查看转换图
na = "6"
# print(4 + na) error
print(4 + int(na))
print(str(4) + na)
score = input("请输入一个数字")
print(type(score)) # score是str类型,不能与int相加
print(int(score) + 6)
不是所有字符串都可以成功转换int
li = "123a" # 123a会报错
print(int(li))
转换图
面试补充
静态类型:类型是编译的时候确定的,后期无法修改
动态类型:类型是运行的时候进行判定的,可以动态修改
强类型:类型比较强势,不轻易随着环境变化而变化
“a”+1 (不会自动改变)
弱类型:类型比较弱势,不同的环境下面,很容易被改变
python是属于强类型的动态类型的语言
python运算符
算术运算符
# 算术运算符
# 加法运算符会重载 +
print(1 + 2)
print("1" + "2")
print([1, 2] + [3, 4]) # [1,2,3,4]
# 减法运算符 -
print(1 - 2)
# 乘法运算符 *
print(1 * 2)
# 幂运算符 **
print(3 ** 5) # 3的5次方 243
# 除法运算符,除数不能是0 /
print(5 / 2) # 2.5
# print(5 / 0)
# 整除运算符 //
print(5 // 2) # 结果2,取整数
# 求模运算,求余数 %
print(5 % 2) # 余数是1
# =
# 赋值运算符
# 注意
# 优先级问题
# ()使用
result = (1 + 2) * 3 / 4
# 整除和求余的应用场景
# 计算东西所在的行和列
num = 6
row = num // 4
col = num % 4
复合运算符
# 复合运算符 **= //= %=
num += 5
num *= 20
比较运算
# 比较运算符,bool
print(10 > 2)
print(10 != 2) # <> python2.x支持,相当于!=,以后统一使用!=为不等于
print(10 == 2) # =赋值 vs ==等于比较运算符
# is比对唯一标识
num = 10 # 10是变量的值,存在内存中某一位置,会把唯一标识给num
print(id(num)) # num唯一标识,根据这个去内存找到内容10,然后使用10
a = 10
b = 10
print(id(a), id(b)) # 相同
print(a is b) # id一样,True
a = [1]
b = [1]
print(a == b) # True,比对值
print(id(a), id(b))
print(a is b) # False,唯一标识不同
# 链式比较运算符
num = 10
print(5 < num < 20)
逻辑运算符
逻辑运算符 not and or
# 逻辑运算符 not and or
b = True
print(not b) # False
# print(True and True) # 一假全假
print(0 and True) # 打印0,已经假,打印0了
print(1 and 3) # 打印3
# print(True or False) # 非0就是真和非空即真
# print(False or False)
print(1 or False) # 打印1
print(0 or False or 9) # 打印9
print(bool("0")) # 非空即真True
print("0" or False) # 0
print("" or False) # False
python输入输出
import sys
# python3里面的input相当于python2.x里面的raw_input
# 函数
content = input("请输入内容")
print(content)
print(type(content)) # 未加工输入,全是字符串类型 1+1是字符串
# 如果想要实现类似于python2中的input(用户输入当作代码处理 1+1 s是int2)功能,可以使用eval()函数
# eval()会将用户的输入内容当作代码进行处理
content = input("请输入内容")
result = eval(content)
print(result)
print(type(result))
# 输出一个值
print(123)
# 输出一个变量
num = 55
print(num)
# 输出多个个变量
num2 = 55
print(num,num2)
# 格式化输入输出
name = "yangliu"
age = 22
print("我的名字是%s,年龄是%d" % (name, age))
print("我的名字是{0},年龄是{1}".format(name, age))
# 输出到文件中
f = open("test.txt", "w")
print("xxxxxxxx", file=f) # 写入到文件
print("xxxxxxxx", file=sys.stdout) # 标准输入在控制台
# 输出不自动换行
print("abc", end="#") # end输出以指定的字符结束,默认是换行 abc#
print("abc", end="\n") # 换行
print("abc", end="") # 不换行
# 输出各个数据,使用分隔符
print("1", "2", "3", sep="=!=") # sep是分隔符,值与值之间可以添加指定的分隔符 1=!=2=!=3
# 格式化输出:占位格式符
# %[(name)][(flags)][(width)][.precision]typecode
# []:可以省略
# (name)表示根据制定名称(key),查找对应的值,格式化到字符串中
mathScore = 59
englishScore = 58
print("我的数学分数是:%d,我的英文分数是:%d"%(mathScore, englishScore))
print("我的数学分数是:%(ms)d,我的英文分数是:%(es)d"%({"ms":mathScore, "es":englishScore})) # 字典
print("%d", mathScore)
# width表示宽度
print("%4d" % mathScore)
# flag对齐 不写右对齐
# -左对齐
print("%-4d" % mathScore)
# 空格,用空格填充,表示在正数左侧填充一个空格,从而与负数对齐
print("% d" % mathScore) # 加两个空格也只会空一个空格
# 0表示用0来填充,不够width才会填充
min = 5
sec = 8
# 05:08
print("%02d:%02d" % (min, sec))
# precision表示小数点后的精度
s = 58.9
print("%f" % s) # 默认小数的精度为六位
print("%.3f" % s) # 三位小数
# typecode必须填写 %d 表示十进制 %o把整数转换成八进制 %E科学计数法 %cUnicode %g科学计数法
print("%d%%" % s) # %表示转义 58.9%
体脂率计算
# 采集一个人的身高体重年龄性别,告诉他体脂率是否在正常范围内
# 功能分析:输入:身高体重年龄性别 处理数据:计算体脂率/判断体脂率是否在正常范围内 输出:是否正常
# 体脂率公式:BMI=kg/(身高*身高)米 体脂率=1.2*BMI+0.23*年龄-5.4-18.8*性别(男1女0) 男性15%-18% 女性25%-28%
# 输入:身高体重年龄性别
personHeight = input("请输入身高(m):")
personHeight = float(personHeight)
personWeight = input("请输入体重(kg):")
personWeight = float(personWeight)
personAge = input("请输入年龄:")
personAge = int(personAge)
personSex = input("请输入性别(男:1 女: 0):")
personSex = int(personSex)
# 处理数据:计算体脂率/判断体脂率是否在正常范围内
BMI = personWeight / (personHeight * personHeight)
TZL = 1.2 * BMI + 0.23 * personAge - 5.4 - 18.8 * personSex
# 0.10 1 0
minNum = 0.15 + 0.10 * (1-personSex) # 最低标准
maxNum = 0.18 + 0.10 * (1-personSex)
result = minNum < TZL < maxNum
# 输出
print("你的体脂率是:", TZL)
print("你的体脂率是否符合标准", result)