Python第三篇正文
一、Python数据类型转换
1
数据类型
1.整数类型
整数类型概念与数学中的概念一致,理论上的取值范围是[-∞,+∞]。实际上Python支持任意大的数字,只受计算机内存大小限制。整数类型有4种进制表示:十进制、二进制、八进制和十六进制2.浮点数类型
浮点数类型与数学中实数的概念一致,表示带有小数的数值。Python语言中要求浮点数类型必须带有小数部分,小数部分可以是0。有两种表示方法:一般表示法和科学计数法受限于计算机表示浮点数使用的存储宽度,计算的二进制数并不是0.1和0.2而是计算机内部最接近0.1和0.2的二进制数。求得的数反映到十进制表示上,就会产生一个不确定尾数,至于尾数是多少,计算机内部会根据二进制运算确定产生。从用户的角度来看,尾数是不确定的,故称为‘不确定尾数’。数据类型转换概念
将一个数据转换成指定的类型,方便处理
方式
类型(需要转换的值)
可以使用Python中内置的函数对变量类型进行转换。
int():将一个数值或字符串转换成整数,可以指定进制。
float():将一个字符串转换成浮点数。
str():将指定的对象转换成字符串形式,可以指定编码。
chr():将整数转换成该编码对应的字符串(一个字符)。
ord():将字符串(一个字符)转换成对应的编码(整数)。
下面的代码通过键盘输入两个整数来实现对两个整数的算术运算。
"""
使用input()函数获取键盘输入(字符串)
使用int()函数将输入的字符串转换成整数
使用print()函数输出带占位符的字符串
"""
a=int(input(a=))
b=int(input(b=))
print(%d+%d=%d%(a,b,a+b))
print(%d-%d=%d%(a,b,a-b))
print(%d*%d=%d%(a,b,a*b))
print(%d/%d=%f%(a,b,a/b))
print(%d//%d=%d%(a,b,a//b))
print(%d%%%d=%d%(a,b,a%b))
print(%d**%d=%d%(a,b,a**b))
说明:上面的print函数中输出的字符串使用了占位符语法,其中%d是整数的占位符,%f是小数的占位符,%%表示百分号(因为百分号代表了占位符,所以带占位符的字符串中要表示百分号必须写成%%),字符串之后的%后面跟的变量值会替换掉占位符然后输出到终端中,运行上面的程序,看看程序执行结果就明白啦。
#号之后表示注释,以及错误原因
num="6"
#print(4+num)#TypeError:unsupportedoperandtype(s)for+:intandstr
print(4+int(num))#10
print(str(4)+num)#46
score=input(请输入一个数字)
print(type(score))#classstr
#print(score+6)#TypeError:canonlyconcatenatestr(not"int")tostr
print(int(score)+6)
score=""#字符串
score=#数值型
为什么要进行数据类型转换:因为不同类型数据不能进行操作,需要将数据转换为同一数据类型才能进行操作。
补充
动态类型和静态类型
静态类型:类型是编译的时候确定的,后期无法修改,比如C语言
动态类型:类型是运行时进行判定的,可以动态修改
强类型和弱类型
强类型:类型比较强势,不轻易随着环境的变化而变化。比如a+1直接报错
弱类型:类型比较柔弱,不同的环境下,很容易被改变。a+1结果--a1
结论:Python是属于,强类型的,动态类型的语言
二、Python运算符
Python支持多种运算符,下表大致按照优先级从高到低的顺序列出了所有的运算符,运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符,我们稍后会陆续讲到其他运算符的使用。
1
算术运算符
#+加法运算符
print(1+2)#3
print("1"+"2")#12
print([1,2]+[3,4])#[1,2,3,4]
#-减法运算符
print(1-5)#-4
#*乘法运算符
print(2*6)#12
#**幂运算符
print(3**5)#3的5次方是
#
#/除法运算符
print(5/2)#2.5
#//整除运算符
print(5//2)#2,只取整数部分,并不是四舍五入
#%求模运算符(求余)
print(5%2)#1
#=赋值运算符,赋值运算符应该是最为常见的运算符,它的作用是将右边的值赋给左边的变量。
#a=10
#b=a+c
#a,b,c=10,20,30
#链式赋值
#a=b=c=3
#注意
#除以0
#优先级问题:在实际开发中,如果搞不清楚运算符的优先级,可以使用括号来确保运算的执行顺序。
#()使用
result=(1+2)/3*4
print(result)#4.0
#整除和求余的应用场景(九宫格)
#行列
2
复合运算符
#批量注释:ctrl+Actrl+/
#num=10
#result=num+5
#num=result
#print(num)#15
num=10
num+=5
print(num)#15
num=10
num**=2
print(num)#
a=10
b=3
a+=b#相当于:a=a+b
a*=a+2#相当于:a=a*(a+2)
print(a)#算一下这里会输出什么
3
比较运算符
比较运算符有的地方也称为关系运算符,包括==、!=、、、=、=,我相信没有什么好解释的,大家一看就能懂,唯一需要提醒的是比较相等用的是==,请注意这个地方是两个等号,因为=是赋值运算符,我们在上面刚刚讲到过,==才是比较相等的比较运算符。比较运算符会产生布尔值,要么是True要么是False。
#是否大于:是否bool类型
#result=#True
result=10!=2#True
print(result)#True
#=或者的关系,一个数不会等于一个数并且大于这个数
#==比对两个值
#is比对唯一标识
a=10
b=10
print(id(a),id(b))#032032
print(aisb)#True
c=[1]
d=[1]
print(a==b)#True
print(id(c),id(d))#96
print(cisd)#False
#链状比较运算符
num=10
num5num20
print(5num20)#True
出于对性能的考虑,Python内部做了很多的优化工作,对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫small_ints的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。Python把这些可能频繁使用的整数对象规定在范围[-5,]之间的小对象放在small_ints中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。因为不再小整数范围内,因此尽管a和b的值是一样,但是他们在Python内部却是以两个独立的对象存在的,各自为政,互不干涉。Python内部为了将性能进一步的提高,凡是在一个代码块中创建的整数对象,如果存在一个值与其相同的对象于该代码块中了,那么就直接引用,否则创建一个新的对象出来。Python出于对性能的考虑,但凡是不可变对象,在同一个代码块中的对象,只有是值相同的对象,就不会重复创建,而是直接引用已经存在的对象。因此,不仅是整数对象,还有字符串对象也遵循同样的原则。所以aisb就理所当然的返回True了,而c和d不在同一个代码块中,因此在Python内部创建了两个值都是1的对象。4
逻辑运算符
逻辑运算符有三个,分别是and、or和not。and字面意思是“而且”,所以and运算符会连接两个布尔值,如果两个布尔值都是True,那么运算的结果就是True;左右两边的布尔值有一个是False,最终的运算结果就是False。相信大家已经想到了,如果and左边的布尔值是False,不管右边的布尔值是什么,最终的结果都是False,所以在做运算的时候右边的值会被跳过(短路处理),这也就意味着在and运算符左边为False的情况下,右边的表达式根本不会执行。or字面意思是“或者”,所以or运算符也会连接两个布尔值,如果两个布尔值有任意一个是True,那么最终的结果就是True。当然,or运算符也是有短路功能的,在它左边的布尔值为True的情况下,右边的表达式根本不会执行。not运算符的后面会跟上一个布尔值,它的作用是得到与该布尔值相反的值,也就是说,后面的布尔值如果是True运算结果就是False,而后面的布尔值如果是False则运算结果就是True。b=True
#not非,取反,真--家;假--真
print(notb)#False
#一假全假
#身份证并且成年--上网
print(TrueandTrue)#True
#or或,或者,or的两边只要有一个条件是真的,那么最终都是真的
#一真全真
#进入一个房间,门开了或者窗户开了--进入到房间
print(TrueorFalse)#True
print(1orFalse)#1
print(bool("0"))#True
"""
比较运算符和逻辑运算符的使用
"""
flag0=1==1
flag1=32
flag2=21
flag3=flag1andflag2
flag4=flag1orflag2
flag5=not(1!=2)
print(flag0=,flag0)#flag0=True
print(flag1=,flag1)#flag1=True
print(flag2=,flag2)#flag2=False
print(flag3=,flag3)#flag3=False
print(flag4=,flag4)#flag4=True
print(flag5=,flag5)#flag5=False
说明:比较运算符的优先级高于赋值运算符,所以flag0=1==1先做1==1产生布尔值True,再将这个值赋值给变量flag0。print函数可以输出多个值,多个值之间可以用,进行分隔,输出的内容之间默认以空格分开。
"""
将华氏温度转换为摄氏温度
华氏温度到摄氏温度的转换公式为:C=(F-32)\div1.8。
"""
f=float(input(请输入华氏温度:))
c=(f-32)/1.8
print(%.1f华氏度=%.1f摄氏度%(f,c))
说明:在使用print函数输出时,也可以对字符串内容进行格式化处理,上面print函数中的字符串%1.f是一个占位符,稍后会由一个float类型的变量值替换掉它。同理,如果字符串中有%d,后面可以用一个int类型的变量值替换掉它,而%s会被字符串的值替换掉。除了这种格式化字符串的方式外,还可以用下面的方式来格式化字符串,其中{f:.1f}和{c:.1f}可以先看成是{f}和{c},表示输出时会用变量f和变量c的值替换掉这两个占位符,后面的:.1f表示这是一个浮点数,小数点后保留1位有效数字。
"""
输入半径计算圆的周长和面积
"""
radius=float(input(请输入圆的半径:))
perimeter=2*3.*radius
area=3.*radius*radius
print(周长:%.2f%perimeter)
print(面积:%.2f%area)
"""
输入年份如果是闰年输出True否则输出False
"""
year=int(input(请输入年份:))
#如果代码太长写成一行不便于阅读可以使用\对代码进行折行
is_leap=year%4==0andyear%!=0or\
year%==0
print(is_leap)
说明:比较运算符会产生布尔值,而逻辑运算符and和or会对这些布尔值进行组合,最终也是得到一个布尔值,闰年输出True,平年输出False。三、Python输入-输出
1
Python输入
Python2版本
处理数据的程序:程序内部写死的从文件里面读取网络服务器进行获取接收用户的输入
结果:写回到文件里面保存发送回服务器打印到控制台,通过一些界面,展示给用户看
#_*_coding:utf-8_*_
#程序第一行必须有utf-8语句,否则就会乱码
content=raw_input("请输入内容")#1+1
printtype(content)#typestr输入都是字符串
printcontent#1+1
content=input("请输入内容")#1+1
printtype(content)#typeint,不接收的东西当做代码处理
printcontent#2
content=raw_input("请输入内容:")#1+1
result=eval(content)
printtype(result)#typeint
printresult#2
Python3版本
input:相当于Python2中的raw_input
格式:result=input(提示信息)
功能:会等待用户输入内容,直到用户按下Enter;会将用户输入的内容当做"字符串",传递给接收的变量。
如果说想要实现类似于Python2中的input功能,可以再使用eval()函数。
content=input("请输入内容:")#1+1
print(type(content))#classstr
print(content)#1+1
content=input("请输入内容:")#1+1
result=eval(content)
print(type(result))#classint
print(result)#2
2
Python2输出
程序开头代码:
#_*_coding:utf-8_*_
#Python2
#输出一个值
print#
#输出一个变量
num=10
printnum#10
#输出多个变量
num2=66
printnum,num2#
#格式化输出
name="GIS集思录"
age=1
#方式一
print"我的名字是",name,",年龄是",age#我的名字是GIS集思录,年龄是1
#方式2
print"我的名字是%s,年龄是%d"%(name,age)#我的名字是GIS集思录,年龄是1
#方式3
print"我的名字是{0},年龄是{1}".format(name,age)#我的名字是GIS集思录,年龄是1
#输出到文件中
f=open("test.txt","w")
printf,"xxxxxxxx"
#输出不自动换行
print"1",
print"2",
print"3",#
#输出的各个数据,使用分隔符分割
print"-".join(["a","b","c"])#a-b-c
3
Python3输出
print函数
print(values,sep,end,file,flush)
values:需要输出的值。多个值,使用","进行分割
sep:分割符,多个值,被输出出来之后,值与值之间,会添加指定的分隔符
end:输出完毕之后,以指定的字符,结束
默认是换行\n
file:表示输出的目标,默认是标准的输出(控制台)。file=sys.stdout
还可以是一个可写入的文件句柄。f=open("xxx","w")file=f
flush:表示立即输出的意思,需要输出的内容,是先存放在缓冲区,然后再输出到目标,flush,就代表是否刷新缓冲区
让缓冲区的内容,立即输出到目标,值为Bool类型,默认False
#输出一个值
importsys
print()#
#输出一个变量
num=55
print(num)
#输出多个变量
num2=66
print(num,num2)
#格式化输出
name="GIS集思录"
age=21
print("我的名字是%s,年龄是%d"%(name,age))#我的名字是GIS集思录,年龄是21
print("我的名字是{0},年龄是{1}".format(name,age))#我的名字是GIS集思录,年龄是21
#输出到文件中
f=open("test.txt","w")
#print("GIS集思录",file=f)#写入到文件
print("GIS集思录",file=sys.stdout)#标准输出
#输出不自动换行
print("abc",end="")
#输出的各个数据,使用分隔符分割
print("1","2","3",sep="")#
#flush参数说明
print("请输入账号",end=,flush=True)#清空缓存,直接输出,再休眠
4
格式化输出
Python2
%写法:print"随意内容...占位符1,...,占位符2,..."%占位符要放的值
print"随意内容...占位符1,...,占位符2,..."%(变量1,变量2)
format写法:print"随意内容...{索引},...,{索引},...".format(值1,值2)
Python3
%写法
print("随意内容...占位符1..."%占位符要放的值)
print("随意内容...占位符1,...,占位符2,..."%(变量1,变量2))
format写法
print("随意内容...{索引},...,{索引},...".format(值1,值2))
占位格式符
格式:%[(name)][flags][width][.precision]typecode使用中括号[]包含的部分,代表可选
(name):用于选择指定的名称对应的值
flags
空:表示右对齐
-:表示左对齐
空格:为一个空格表示在正数的左侧填充一个空格,从而与负数对齐
0:表示使用0填充
width:表示显示宽度
.precision:表示小数点后精度
typeCode
数值
i/d:#将整数、浮点数转换成十进制表示,并将其格式化到指定位置
o:#将整数转换成八进制表示,并将其格式化到指定位置
x:#将整数转换成十六进制表示,并将其格式化到指定位置
e:#将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E:#将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
f:#将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F:#同上
g:#自动调整将整数、浮点数转换成浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
G:#自动调整将整数、浮点数转换成浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
字符串
s:#获取传入对象的__str__方法的返回值,并将其格式化到指定位置
r:#获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
c:#整数:将数字转换成其unicode对应的值,10进制范围为0=i=(py27则只支持0-);字符:将字符添加到指定位置
特殊
%:#当字符串中存在格式化标志时,需要用%%表示一个百分号
注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式%b
#格式化输出
#%[(name)][flags][width][.precision]typecode
#[]:可以省略
#(name):表示,根据,制定的名称(key),查找对应的值,格式化到字符串中
mathScore=59
englishScore=58
#print("我的数学分数是%d,英语分数是%d"%(mathScore,englishScore))#我的数学分数是59,英语分数是58
#width:表示占用宽度
print("%d"%mathScore)#59
print("%7d"%mathScore)#59
min=5
sec=8
#05:08
print("%2d:%2d"%(min,sec))#5:8
print("%02d:%02d"%(min,sec))#05:08不齐用0补齐
score=59.9
print("%f"%score)#59.
print("%.2f"%score)#59.90
print("%i"%score)#59
print("%o"%10)#12
四、Python小节案例
1
体脂率计算
案例描述
采集一个人的身高,体重,年龄和性别;告诉Ta,自己的体脂率是否在正常范围之内
知识考察点
注释
输入输出
变量使用
变量的命名规范
运算符的使用
数据类型转换
2
代码展示
#Python版本问题--3
#思路,语法--工具
#使用注释,理清楚,具体的实现步骤
#代码填充
#输入
#身高
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=体重(kg)/(身高*身高)(米)
#体脂率=1.2*BMI+0.23*年龄-5.4-10.8*性别
BMI=personWeight/(personHeight*personHeight)
TZL=1.2*BMI+0.23*personAge-5.4-18.8*personSex
minNum=0.15+0.10*(1-personSex)
maxNum=0.18+0.10*(1-personSex)
result=minNumTZLmaxNum
#判定体脂率,是否在正常的范围之内
#正常成年人的体脂率分别是男性15%~18%和女性25%~28%
#TZLminmax
#输出
#输出对应的结果
#是否正常
print("你的体脂率,是%f"%TZL)
print("你的体脂率,是否符合标准",result)
每有一篇Python推送,头发就会少十几根,所以最后求一波转发、点赞和在看吧
预览时标签不可点收录于话题#个上一篇下一篇