day 4 note 循环关键字 和 位运算

day 4 note 循环关键字 和 位运算

01. 循环关键字

1.continue

continue是关键字,只能用在循环体中

当执行循环体的时候,如果遇到continue, 当次循环直接结束,马上进入下次循环的判断(遇到continue结束一次循环)

练习:计算1100中所有不能被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 循环结束的条件:
        breakwhile计算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
  1. 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
当然可以!下面是对Java位运算和枚举法的简要解释: ### 位运算 位运算是对二进制数进行操作的运算符。Java中包含六种位运算符: 1. 与运算(&):将两个二进制数的每一位进行与操作,当且仅当两个数对应的位都为1时,结果的对应位才为1。 2. 或运算(|):将两个二进制数的每一位进行或操作,当两个数对应的位中有至少一个为1时,结果的对应位就为1。 3. 异或运算(^):将两个二进制数的每一位进行异或操作,当且仅当两个数对应的位不相同时,结果的对应位才为1。 4. 取反运算(~):将一个二进制数的每一位取反,即0变为1,1变为0。 5. 左移位运算(<<):将一个二进制数向左移动指定的位数,右侧空位补0。 6. 右移位运算(>>):将一个二进制数向右移动指定的位数,左侧空位补符号位(即如果原二进制数最高位为1,则移动后的空位补1,否则补0)。 位运算在Java中的应用场景很多,例如可以使用位运算进行快速的数值计算和状态控制。 ### 枚举法 枚举法是一种常用的算法思想,其基本思路是枚举所有可能的情况,然后从中找出符合条件的解。在Java中,可以使用枚举类型来实现枚举法。 枚举类型是Java中的一种特殊类型,它允许我们将一组有限的常量放入一个枚举类型中。例如,我们可以定义一个表示星期几的枚举类型: ``` enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } ``` 在枚举类型中,每个常量都是一个枚举类型的实例,我们可以使用枚举类型的实例来代表一个特定的值。例如,我们可以使用Day.MONDAY来表示星期一。 使用枚举类型可以让代码更加清晰和可读,同时也方便进行类型安全的编程。在实现枚举法时,我们通常会将枚举类型作为输入参数,然后枚举其中的所有可能情况,找出符合条件的解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值