循环关键字和位运算
-
循环关键字
# 1.continue # continue是关键字,只能用在循环体中 # 当执行循环体的时候,如果遇到continue,当次循环立即结束,马上进入下次循环的判断(遇到continue结束一次循环) for x in range(3): print('======') continue print('------') # 练习:计算1到100中所有不能被3整除的数的和 sum = 0 for x in range(1, 101): if x % 3 == 0: continue sum += x print(sum) # 2.break # break是关键字;只能在循环体中使用 # 当执行循环体的时候,如果遇到break,整个循环直接结束 for x in range(4): print('=====') break # while循环和break一起使用 """ while True: 需要重复的操作 if 循环结束的条件: break """ # 用while计算1+2+3...100 x = 1 sum = 0 while True: sum += x if x == 100: break x += 1 print(sum) # 练习:找出1000以上第一个能被3整除的数 num = 1000 while True: if num % 3 == 0: print(num) break num += 1 # 4.else """ 1) python中完成的for: for 变量 in 序列: 循环体 else: 代码段 2) python中完成的while while 条件语句: 循环体 else: 代码段 在for循环或者while循坏后面加else结构不会影响原循环的执行 如果循环是正常结束的,循环结束后会执行else后面的代码段;如果循环是因为遇到break结束,那么else后面的代码就不会执行 (可以根据else后面的代码是否执行来判断循环在执行过程中有没有遇到break) """ for x in range(4): print('=====') break else: print('end') # 练习:判断一个数是否为素数 num = 7 if num > 1: for x in range(2, num): if num % x == 0: print(num, '不是素数') break else: print(num, '是素数') else: print('请输入大于1的自然数') if num > 1: for x in range(2, int(num**0.5 + 1)): if num % x == 0: print(num, '不是素数') break else: print(num, '是素数')
-
数据存储
# 计算机存储数据只能是存储二进制数据(计算机只有存储数字的能力,并且存储的是这个数字的二进制补码) # 1.进制 # 1)十进制 """ 基数:0,1,2,3,4,5,6,7,8,9 进位:逢10进1 位权:10的N次方 2341 -> 1*10**0 + 4*10**1 + 3*10**2 + 2*10**3 程序中的表示方式:直接写 """ 123 # 2)二进制 """ 基数:0,1 进位:逢2进1 位权:2的N次方 101011 -> 1*2**0 + 1*2**1 + 0*2**2 + 1*2**3 + 0*2**4 + 1*2**5 = 43 程序中的表示方式:加前缀0b/0B """ 0b10101 # 0b10102 报错 二进制中不能出现0和1以外的基数 # 3)八进制 """ 基数:0,1,2,3,4,5,6,7 进位:逢8进1 位权:8的N次方 123 -> 3*8**0 + 2*8**1 + 1*8**2 = 83 程序中的表示方式:加前缀0o/0O """ 0o77 # 4)十六进制 """ 基数:0-9, a/A(10)-f/F(15) 进位:逢16进1 位权:16的N次方 af -> f*16**0 + a*16**1 = 15*1 + 10*16 = 175 程序中的表示方式:加前缀0x/0X """ 0xaf # 2.进制转换 # 1)其他进制转十进制:基数乘以位权的和 print(0b1011) print(0o56) print(0x12f) # 2)10进制转其他进制(辗转取余法) # 转二进制方法:bin - 将其他进制转二进制 # 转八进制方法:oct # 转16进制方法:hex print(bin(100)) print(oct(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 = 1024Mb # 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 num = 7 if num & 1 == 0: print('偶数') else: print('奇数') # 2)快速乘2操作:数字 << 1 # 00000001 -> 00000010 print(3<<1) print(-3<<1) print(3<<2) # 12 # 3)快速整除2操作:数字 >> 1 print(4>>1) print(6>>1) print(9>>1) # 4 print(-9>>1) # -5