一、运算符
1. 数学运算符
+(加)、-(减)、*(乘)、/(除)、%(取余、取模)、//(整除)、**(幂)
- 除(/)
print(2/5)#0.4
- 取模
print(8%2) #2
print(15%4) #3
#应用:取低位数,取个位数,%10,取百位数%100
print(12312%100)
print(8979%10)
- // 整除 x除以y的结果向小取整
print(5/2)
print(5//2)
print(-5//2) #-3
print(89//3)
print(-289//32)
#应用:去掉低位数,获取最高位
print(28013//100)
#练习:获取任意一个整数的十位数
#方法一
print((345//10)%10)
print((18976//10)%10)
print(6%6)
#方法二
print((345%100)//10)
print((18976%100)//10)
print(6//10)
- 幂 求x的y次方
print(2**3)
print(25**0.5)#开平方
print(27**(1/3))#开三次方
print(29**4)
2.比较运算符
print(10%2==0) #= =
print(5!=5) #! =
print(3!=1)
print(78>=21) #> =
print(213<=59) # < =
age=999
print(12<=age<=80)#C语言 12<=age && age<=78
3.逻辑运算符
#and or not
num=21
print(num,'是否能够同时被3和7整除',num%3==0 and num%7==0)
print(num,'是否能够同时被3和7整除',num%21==0)
num2=4
print(num2 %3==0 or num2 %7==0 or num2 %5==0)
years=eval(input('年份:'))
print((years%4==0 and years%100!=0 )or ( years%400==0))
#对一个条件进行否定 not True->false
age=212
print(not (age%3==0 and age%7==0))
- 逻辑运算符的拓展
逻辑与运算的短路操作:如果第一个条件是false,那么后面的条件不会执行
False and print('条件1')
print('==========')
逻辑或运算的短路操作:如果第一个条件是True,那么后面条件不再执行
False or print('条件2')
- 数据的布尔测试
-
python中任何类型的数据都可以转换成布尔
转换规则:任何为0为空的值都会转换成false,其他都是true
空串 “” [] () {} -> false
none ->falseprint(bool(0)) print(bool('')) print(bool(None))
-
数据1 and 数据 2
如果数据1的布尔值是True,结果就是数据2
如果数据1的布尔值是false,结果就是数据1
也可理解为找到假值就直接返回假值,一直是真值就一直是找下去,返回最后一个真值print(0 and 10) #0 print(1 and 2) #2 print(-3 and 9) #9 print(None and 'abc')#None print(False and 100) #False
-
数据1 or 数据2
如果数据1的布尔值是true,结果就是数据1;如果数据1的布尔值是false,结果就是数据2
也可理解为一直找真值,找到真值就返回真值,否则就一直找下去,返回最后一个假值
print(0 or 10) #10
print(1 or 2) #1
print(-3 or 9) #-3
print(None or 'abc')#abc
print(False or 100) #100
- not 数据
print(not 100) #false
print(not 'abc') #false
print(not "") #true
4.赋值运算符
给变量赋值,不会产生结果(数据)!!!
赋值语句没有结果
num =100
num +=10
num *=3
num %=4
print(num)
5. 位运算
- 计算机直接能存储的数据只有数字
2进制:(0-1)0b1010
八进制(0-7) 0o67
16进制(0- 9 A10 B11 C12 D13 E14 F15) 0xff00
print(bin(89))
print(bin(0o45))
- bin() 转二进制 , oct() 转八进制,hex()转16进制
计算机保存二进制的补码
原码 :最高位表示符号位加真值,后面是数的二进制
print(bin(25263))
-
正数的原码补码反码一样
负数才有反码和补码
反码: 符号位不变,其余各位取反10(反码) 0 0001010
-10(反码)1 1110101 -
补码 反码加1 1110110
计算器底层只能做加法,所以需要原码补码反码
减法 就是 负数补码相加 得到的(是反码)变成原码就是运算结果 -
位运算:对计算机内存空间里面的数对二进制数进行运算:&(与)、|(或)、^(异或)、<<(左移)、>>(右移)
- 101 & 001 ->000 相应位为都为1,结果为1,否则为0
print(7 & 2)
应用1:偶数二进制存储最低位一定为0,奇数最低位(2的0次方)一定是1,若某数与1相与,则保留了最低位,其他位置0
-
或 ( | ) 有1个为1,结果为1 应用:置1
-
异或 ( ^ ) 二进制相异,结果为1 异或两次,还原
-
按位取反 (~) ,对每个二进制位取反,即把1->0,0->1
-
左移 (<<N) 运算的各二进位全部左移若干位,高位丢弃,低位补0 应用:乘2的次方倍
print(3<<1)#6 乘2的1次方 <<N 2的N次方
print(5<<1)#10
print(-2<<1)#-4
- 右移 ( >>N) ,整数快速整除 2的N次方
print(6>>1) #3
print(-5>>1)#-3
6.运算符优先等级
- 数学运算>比较运算>逻辑运算>赋值(赋值优先级别最低)
- 数学运算符里面的运算符:** 大于 * / % // 大于 + -
- 有括号先算括号 运算中只有小括号
num= 10
num *=8*2 # num*=16
print(num)
二、分支结构
1. 单分支结构
#闰年判断
years=eval(input('请输入年份:\n'))
print(years)
if (years%4==0 and years%100!=0)or (years%400==0):
print('该年是闰年')
else:
print('该年是平年')
#判断偶数多种方法
num=eval(input('请输入一个数:'))
if num%2==0:
print('偶数')
else:
print('奇数')
#一种有点费脑子的写法
if num%2: #布尔值 num%2 if 为真 就执行if后面的语句
print('奇数')
else:
print('偶数')
if not num%2: #不 假 则真
print('偶数')
else:
print('奇数')
str1=''
if str1:# if真
print('不是空串')
else:
print('是空串')
2.多分支结构
- 从上往下依次判断条件语句的结果是否为True,如果为True就执行这个if或者elif对应的代码段,执行完if再判断后面的条件
- else后面的代码只有在前面所有的条件都不满足的时候才会执行
if score < 60:
print('E')
elif score < 70:
print('D')
elif score < 80:
print('C')
elif score < 90:
print('B')
else:
print('A')
num = eval(input('请打印一个数\n'))
if num % 2:
print('奇数')
else:
print('偶数')
if num % 4 == 0:
print('且是4的倍数')