04-循环关键字和位运算

循环关键字和位运算

  • 循环关键字

    # 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
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值