day 4 note 循环关键字 和 位运算
01. 循环关键字
1.continue
continue是关键字,只能用在循环体中
当执行循环体的时候,如果遇到continue, 当次循环直接结束,马上进入下次循环的判断(遇到continue结束一次循环)
练习:计算1到100中所有不能被3整除的数的 和
sum1 = 0
for x in range(1, 101):
if x % 3 == 0:
continue
sum1 += x
2.break
break是关键字;只能在循环体中使用
当执行循环体的时候,如果遇到break,整个循环直接结束。
for x in range(4):
print('&&&&&&&')
break
print('+++++++')
print('-------')
while True:
value = input('请输入:')
if value == '0':
break
3.while循环和break一起使用
while True:
需要重复的操作
if 循环结束的条件:
break
用while计算1+2+3+...+100
sum1 = 0
num = 1
while True:
sum1 += num
num += 1
if num > 100:
break
print(sum1)
练习:找出1000以上第一个能被3整除的数
num = 1000
while True:
if num % 3 == 0:
break
num += 1
print(num)
4. else
- python中完整的for 2) python中完整的while
for 变量 in 序列: while 条件语句:
循环体 循环体
else: else:
代码段 代码段
在for循环或者 while循环后面加else结构不会影响原循环的执行。
如果循环是正常结束的,循环结束后会执行else后面的代码段; 如果循环是因为遇到break而结束,那么else后面的代码就不会执行。
(可以根据else后面的代码是否执行来判断循环在执行过程中有没有遇到 break)
练习:判断一个数是否是素数
素数:又叫质数, 除了1和它本身以外不能再被其他的数整除
num = 8
方法一:
if num > 1:
for x in range(2, num):
if num % x == 0:
print(num, '不是素数!')
break
else:
print(num, '是素数!')
else:
print('不是素数!')
02. 进制 和 位运算
计算机存储数据只是存储二进制数据(计算机只有存储数字的能力,并且存的是这个数字二进制补码)
1.进制
1)十进制
“”"
基数:0,1,2,3,4,5,6,7,8,9 (789, 1297, 104)
进位:逢10进1 (8+2 -> 10, 9+5 -> 14)
位权:10的N次方(N从0开始) 2341 -> 110**0 + 4101 + 3*102 + 2*10**3
程序中的表示方式:直接写
“”"
123
856
2)二进制
基数:0,1 (001, 110, 11011)
进位:逢2进1 100 + 110 ->
位权:2的N次方 (N从0开始) 101011 -> 12**0+121+0*22+12**3+024+1*25 = 1+2+8+32=43
程序中的表示方式:加前缀0b / 0B
0b10110
0B11011
0b10112 # 报错!二进制数中不能出现0和1以外的基数
3)八进制
基数:0,1,2,3,4,5,6,7 (123, 456,14567)
进位:逢8进1
位权:8的N次方 (N从0开始) 123 -> 38**0+281+1*82 = 3+16+64=83
程序中的表示方式**:加前缀0o / 0O**
0o56
0o78
4)十六进制
基数:09,a/A(10)f/F(15) (af, 10ee, abcd, FFB6C1)
进位:逢16进1
位权:16的N次方 (N从0开始) af -> f16**0 + a16**1 = 151 + 1016 = 175
程序中的表示方式:加前缀0x / 0X
2.进制转换
1)其他进制转10进制:基数乘以位权的和
方法:print
0b1011 -> 20 + 21 + 2**3 = 11
0o56 -> 68**0 + 58**1 = 6 + 40 = 46
0x12f -> 1516**0 + 2161 + 1*162 = 15+32+256 = 303
print(0b1011)
print(0o56)
print(0x12f)
2)10进制转其他进制(辗转取余法)
转二进制方法:bin - 将其他进制转二进制
转八进制方法:oct
转16进制方法:hex
print(bin(100))
print(oct(100))
print(hex(100))
print(bin(0x4a3))
3.原码、反码和补码
正数的原码、反码和补码一样
1)原码:符号位+真值
真值:数字绝对值的二进制, 符号位:0表示正,1表示非
10的真值:1010, -10的真值:1010
10的原码:01010, -10的原码:11010
计算机中10的原码:00001010 -10的原码: 10001010
2)反码 - 符号位不变,其他位取反
-10的反码(1字节):11110101
3)补码 - 反码加1
-10的补码:11110110
“”"
内存最小单位是位(bit)
1字节 = 8位 (内存开辟的最小单位是字节)
1kb = 1024字节
1Mb = 1024kb
1G = 1024MK
1T = 1024G
计算:2 - 3
2的原码: 00000010
2的补码: 00000010
-3的原码: 10000011
-3的补码:11111101
原码计算:00000010 + 10000011 = 10000101 -> -5
补码计算:00000010 + 11111101 = 11111111(补码) -> 11111110(反) ->10000001 -> -1
4.位运算:&(按位与), |(按位或), ^(按位异或), ~(按位取反), <<(左移), >>(右移)
位运算的特点:运算效率高,内存消耗少; 但是完成复杂运算的时候难度高
1) 快速判断数字的奇偶性: 数字 & 1
print(10 & 1)
print(102 & 1)
print(228 & 1)
num = 69
if num & 1 == 0:
print('偶数')
else:
print('奇数')
2)快速乘2操作: 数字 << 1
print(3 << 1)
print(12 << 1)
print(-5 << 1)
print(3 << 2)
3)快速整除2操作: 数字 >> 1
print(4 >> 1)
print(6 >> 1)
print(9 >> 1) # 4
print(-9 >> 1) # -5