Python 学习整理
数据类型,函数,运算符,bool值,选择结构
一,基本的参数类型
相较于C语言来说,Python的数据类型,准确的来说应该是绝大部分的数据类型应该都是这几类,“int”整数型,“float”浮点型,“bool”布尔型,“str”字符串型,对于Python来说每个参数都对应着三个基本的属性:id,type,value
例如,输入如下代码
a=2
print(id(a))
print(type(a))
print(a)
这里使用到了print 函数,作用就是打印你所需要的东西,函数格式为print()
二,函数
print()函数
上面提到了print函数,其实像print函数这样类型的输出函数,应该是所有编程语言最开始都要使用的吧,毕竟大多数程序员的第一段代码应该都是“hello world”吧
# 输出数字
print(56.5)
print(362)
# 输出字符串
print('hello world')
print("hello world")
# 输出表达式(会自动输出计算结果)
print(5+3)
# 将数据输出到文件当中
fp = open('D:/Python data/text.txt ', 'a+')
# "a+"的意思是如果不存在就创建一个,如果存在就继续追加
print('hello world', file=fp)
fp.close()
# 不进行换行输出(全部在一行显示)
print('hello', 'world', 'Python')
input()函数和int(),float()
input顾名思义,这是一个输入函数,类似于C语言中的scanf函数,这里有一个需要注意的地方,input函数录入的参数type类型是str字符串类型,如果想要录入数字参与计算使用的话就必须使用int(),和float()函数,来转换参数类型,例如:
# 输入两个整数求和
a1=input('第一个整数')
a2=input('第二个整数')
print(type(a1),type(a2))
# input函数输入的为str类型的参数,要使用其录入的计算前要将参数转化为int或者float类型
print('结果为:',int(a1)+int(a2))
print('结果为:',float(a1)+float(a2))
(对于初学者来说,这几个函数暂时应该够用)
三,运算符
Python中的运算符大致分为这几类:赋值,加,减,乘,除,取余,取整,n次方运算,大小比较,逻辑运算
print(5+6)
print(5-6)
print(11/6)
print(11//6)# 双斜杠为整数除
print(5*6)
print(11%3)# 取余运算
print(2**3)# 表示2的三次方
print(10//4)
print(-10//-4)
计算同正同负的情况自然不需要多考虑下面要注意的是一正一负的情况
# 在除数和被除数一正一负的情况下向下取整
print(9//-4)
print(-9//4)
这里向下取整的意思可能有点难懂,你可以画一个数轴以右边为正方向,假设计算结果为-3.2,那么取整结束的结果为-4,总之就是,当计算结果小于0的时候,只要不是整数,那么就取离他最近的左边的整数就作为计算结果
然后是正负数取余计算
# 正负数取余 取余的计算公式为被除数-(商*除数 )
print(10%-3) #-2
print(-10%3) #2
另外这里的商不是舍去小数点后面的数字而是取整,以上面的式子为例-10/3应该是-3.333333循环我们取整就是4,那么上述式子就转化成了余数=-10-(-4*3)=2
Python里面的赋值运算
# 赋值运算从右向左进行计算
a=9+3
print(a)
# 支持链式赋值
c=b=a
print(a,b,c,)
print(type(a),id(a))
print(type(b),id(b))
print(type(c),id(c))
上面的代码输出的的a,b,c的值是一样的,因为对于计算机来说,相同的int值都存储在相同的内存单元里面,我们将参数赋值给变量的时候其实是将参数的id给到了变量,在引用这些变量的时候,通过给到变量id来找到内个存储单元,从而调用存储单元中的value值参与变量计算,这一点有点类似C语言中的指针,也是通过地址来调用参数
i=50
i+=10
print(i,type(i))# 60
i-=10
print(i,type(i))# 50
i*=10
print(i,type(i))# 500
i//=10
print(i,type(i))# 50取整不改变数据类型
i/=10
print(i,type(i))# 5.0除法自带将int类型的数据转化为float型
i**=2
print(i,type(i))# 25.0
i%=3
print(i,type(i))
上面的有一部分东西在学C语言的时候都学过了,所以剩下的东西就很好理解
解包赋值
说实话,我也没怎么理解啥事解包赋值,但是运用上就是,一 一对应赋值,看代码会更好理解
m,n,l=5,6,7
print(m,n,l)
print('交换变量值')
a,b=1,2
print('交换前',a,b)
a,b=b,a
print('交换后',a,b)
这里与C语言不一样的是,交换两个变量的参数值不需要借助第三个变量来进行参数交换
比较运算符
比较运算符的计算结果为布尔值
a=int(input('a='))
b=int(input('b='))
print('a>b吗?',a>b)
print('a<b吗?',a<b)
print('a=b吗?',a==b)
print('a<=b吗?',a<=b)
print('a>=b吗?',a>=b)
print('a!=b吗?',a!=b)
变量分为三部分 标识,类型和值也就是id,type,value
,而比较运算符进行值(value)的比较
is是对id标识的比较
a=int(input('a='))
b=int(input('b='))
print(a==b)
print(a is b)
存在value值一样但是id标识不同的情况,我个人的理解为==比较大小,is(not)比较地址,如果是单独的数字变量它在内存空间的位置是不变的,但是如果是其他情况,比如说列表元素字典,每生成一个就要单独分配一个内存空间,所以id自然不一样
lst1=[11,22,33,44]
lst2=[11,22,33,44]
print(id(lst1))
print(id(lst2))
print(lst1 is not lst2)# 运行结果为Ture
布尔运算符
布尔运算符(个人理解为数学里的或且非)and(且) or(或) not(非)
类型 | 运行结果 |
---|---|
and运算符 | |
True and Ture | True |
True and False | False |
False and False | False |
or运算符 | |
True and Ture | True |
True and False | True |
False and False | False |
not运算符 | |
not True | False |
not False | True |
in和not in
运算结果还是bool值,看代码和运行结果更加直观
h1='hello world'
print('h' in h1)# True
print('l' not in h1)# True
print('a' in h1)# False
按位计算符
这里是按位计算& ,|将需要计算的的数字转换为二进制数再进行对位比较,&是全唯1就输出1,|是只要有1就输出1,没有就输出0,先看代码
print(4&5)#4
print(4|5)#5
第D~J列是二进制码,第K列是对应的十进制数,这张图是演示的是print(4&5),第三行是运算结果,我们从第J列开始看起,可以将第J列理解为二进制码的第一位,我们可以看见黄色的第J列是0,红色是1,那么根据&符的运算法则,不全为1,所以蓝色运算结果就是0,第I列同理,到了第H列变为了全为1,那么蓝色的运算结果就是1,再往后运算结果都是0,那么结算结果的二进制码就出来了100,在转化为十进制就是4。
‘|’符运算法则有1就为1,具体运算过程可以参照&符
下面">>" ,"<<",运算原理和上面类似,先看代码:
print(11>>2)# 2
print(11<<2)# 44
这两个运算符的运算法则说明白就是“高位溢出,低位截断”,"<<"(转换为二进数后左移)," >>"(转换为二进制数后右移),向左移动的时候第1位位补零,向右的时候多出来的位数截断(无论是0还是1)
第E~J二进制码,第K列是对应的十进制码,先看红色内行,执行>>运算符,11,是进行运算的参数,而2是所对应的二进制码移动的位数,红色向右移动2为,那么蓝色原来的IJ两列的1,就被截断了,1011就变成了10,转换十进制为2,黄色向左移动两位,那原先的IJ两列就空出来了,这里就需要补0,1011就变成了101100,转化为十进制为44
运算符优先级
最后是运算符的优先级**大于*,/,//,%大于+,—大于<<,>>大于&大于|大于and大于or大于=
四, bool值为False的情况
# 获取变量的bool值使用bool()函数
# 以下变量bool值为False
print(bool(0))
print(bool(0.0))
print(bool("")) # 空字符串
print(bool('')) # 空字符串
print(bool(False)) # False本身
print(bool({})) # 空字典
print(bool(dict())) # 空字典
print(bool([])) # 空列表
print(bool(list())) # 空列表
print(bool(tuple())) # 空元组
print(bool(())) # 空元组
print(bool(None))
print(bool(set())) # 空集合
print('--------------其余为True----------------')
五,选择结构
if else选择结构
这很简单,基本结构如下所示
if 条件:
要执行的语句
else:
要执行的语句
条件计算结果bool值为Ture执行if下面的语句,否则就是else
这里举一个例子
num=int(input('请输入一个整数:'))
if num % 2:
print('是奇数哦')
else:
print('是偶数哦')
if elif选择结构
这里直接举一个例子会更直观
score=float(input("请输入学生的成绩:"))
if 90 <= score <= 100:#条件格式写成score>=90 and score<=100也行
print('A')
elif 80 <= score < 90:
print('B')
elif 70 <= score < 80:
print('c')
elif 60 <= score < 70:
print('D')
elif 0 <= score < 60:
print('E')
else:
print("请输入合法成绩")
在这里我做了一个if else和if elif的嵌套练习
"""
设置商场消费打折程序要求
vip用户0-199元9折
200-500元8折
501-1000元73折
1001-2000元68折
2001以上6折
非vip用户0-300不打折
301-1000元9折
101-1500元85折
1501以上77折
"""
charge=float(input('请输入您的消费金额'))
answer=input('请问您是会员吗,是/不是')
if answer=='是':
if 200< charge <=500:
charge*=0.8
print('打完折后的价格为:',int(charge))
elif 500< charge <=1000:
charge*=0.73
print('打完折后的价格为:',int(charge))
elif 1000< charge <=2000:
charge*=0.68
print('打完折后的价格为:',int(charge))
elif 2000< charge:
charge*=0.6
print('打完折后的价格为:',int(charge))
elif 0<= charge <=200:
charge*=0.9
print('打完折后的价格为:',int(charge))
else:
if 0<= charge <=300:
print('您的消费金额过低,不能参与打折哦,建议参加会员呢')
elif 300< charge <=1000:
charge*=0.9
print('打完折后的价格为:',int(charge))
elif 1000< charge <=1500:
charge*=0.85
print('打完折后的价格为:',int(charge))
elif 1500< charge:
charge*=0.77
print('打完折后的价格为:',int(charge))
这里需要注意的是,嵌套过程需要注意对齐
好了,今天就到这里。
以上内容整理自从b站杨淑娟老师的Python教学,杨老师讲的真的非常清楚,有不清楚的可以移步https://www.bilibili.com/video/BV1wD4y1o7AS