day4-循环关键字和位运算
1.循环关键字
1)continue
continue是关键字,只能用在循环体中
当执行循环体的时候,如果遇到continue,每次循环直接结束,马上进入下次循环的判断(遇到continue结束一次循环)
练习:计算1到100中所有不能被3整除的数的和
sum = 0
for x in range(0, 101, 3):
sum += x
print(5050 - sum)
2)break
break是关键字,只能在循环体中使用
当执行循环体的时候,如果遇到break,整个循环直接结束
练习:
while True:
value = input('请输入:')
if value == '0':
break
# 用while计算1+2+3+....+100
sum = 0
x = 1
while True:
sum += x
if x == 100:
break
x += 1
print(sum)
# 练习:找出1000以上第一个能被3整除的数
x = 1000
while True:
if x % 3 == 0:
break
x += 1
print(x)
3)else
- python中完整的for:
for 变量 in 序列:
循环体
else:
代码段
- python中完整的while
while 条件语句:
循环体
else:
代码段
在for循环或者while循环后面加else结构不会影响原循环的执行。
如果循环是正常结束的,循环结束后会执行后面的代码段,如果循环因为遇到break而结束,那么else后面的代码就不会执行
(可以根据else后面的代码是否执行来判断循环过程中有没有遇到break)
练习:
# 判断一个数是不是质数
num = 8
for x in range(2, num):
if num % x == 0:
print(num, '不是质数')
break
else:
print(num, '是质数')
else:
print('不是质数')
# 方法二
if num > 1:
for x in range(2, int(num**0.5+1)):
if num % x == 0:
print(num, '不是质数')
else:
print(num, '是质数')
else:
print('不是质数')
2.数据存储
计算机存储数据只能存储二进制数据(计算机只能存储数字的能力,并且存的是这个数字二进制补码)
1.进制
1)十进制
基数:0,1,2,3,4,5,6,7,8,9
进位:逢十进一
位权:10的N次方
程序中的表示方式:直接写 19 + 20 = 39
- 二进制
基数:0,1 (001, 110, 11011)
进位:逢二进一
位权:2的N次方 (N从0开始) 101011 ->
程序中的表示方式: 加前缀0b/0B
如:ob1010
3)八进制
基数:0,1,2,3,4,5,6,7
进位:逢八进一
位权:8的N次方
程序中的表示方式:加前缀0o/0O
如:0o26
4)十六进制
基数:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
进位:逢十六进一
位权:16的N次方
程序中的表示方式:加前缀0x/0X
如:0x29af
2.进制转换
1)其他进制转10进制:基数乘以位权的和
2)其他进制转十进制
# 转二进制方法:bin
print(bin(100))
# 转八进制方法:oct
print(oct(100))
# 转十六进制方法:hex
print(hex(100))
print(bin(0x100))
3.原码、反码和补码
正数的原码、反码和补码一样
1)原码:符号位+真值
真值指数字绝对值的二进制,符号位:0表示正,1表示负
10的真值:1010, -10的真值:1010
10的原码:01010, -10的原码:11010
计算机中10的原码:00001010 -10的原码:10001010
2)反码 - 符号位不变,其他位取反
-10的反码(1字节):11110101
3)补码 - 反码加1
-10的补码:11110110
4.位运算
位运算-&(按位与), |(按位或), ^(按位异或),~(按位取反), <<(左移), >>(右移)
位运算的特点:运算效率高,内存消耗少;但是完成复杂运算的时候难度高
练习:
- 快速判断数字的奇偶性: 数字 & 1(偶数为0,奇数为1)
print(2010 & 1)
num = 10
if num & 1 == 0:
print('偶数')
else:
print('奇数')
2) 快速乘2操作:数字 << 1
print(3 << 1)
3) 快速整除2操作: 数字 >> 1 (整除)
print(4 >> 1)