Python数字运算(-)数值、哈希、按位、布尔等运算

所有的类型都可以被比较、检测逻辑值、转换字符串,所有的数据类型都可进行数学运算。

逻辑值检测

任何数据类型或对象皆可进行逻辑值检测,默认情况下均被视为真值,除非对象或所属类重定义了bool()方法且返回False 或者是对象定义了len()方法且返回零。

以下是在逻辑检测时被视为假值的对象:

.被定义为假值的常量:None 和 False

.任何数值类型的零:0,0.0,0j,Decimal(0),Fraction(0,1)

.空的序列和多项集:'',(),{},set(),range(0)

Bool运算

Bool运算包括 and、or、not,按照优先级排列not > and > or

运算 结果 注释
x or y 如果x为false,那么返回y,否则返回x or为短路运算符,只有在第一个参数为假值时才会对第二个参数求值
x and y 如果x为false,那么返回x,否则返回y and同样是短路运算符,只有在第一个参数为真值时才会对第二个参数求值
not x 如果x为false,那么返回True,否则返回False 优先级比非布尔运算符低,因此 not a == b会被解读为not (a==b),而a == not b会造成语法错误

比较运算

Python中有八种比较运算符,优先级相同,但都比布尔运算优先级高,并且比较运算符可以任意串联。例如,x<y<=z等价于 x< y and y <=z,不同之处是前者y只被求值一次,后者会被求值两次,相同点是在x<y结果为假时z都不会被求值。

八种比较运算符如下:

运算符 含义
< 小于
<= 小于或等于
> 大于
>= 大于等于
== 等于
!= 不等于
is 对象标识
is not 否定的对象标识

比较运算注意点

. 不同数字、不同类型对象比较时绝不会相等

. 函数类型仅支持简化形式比较

. <,<=,>,>= 运算符在比较复数和其它数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SHA-256哈希算法是一种加密算法,用于将任意长度的消息转换为一个长度为256位的哈希值。下面是一个Python的实现,该实现不使用任何函数库直接实现SHA-256哈希算法。 ```python import math # 初始化常量 h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ] k = [ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 ] # 定义一些辅助函数 def rotr(x, n): return (x >> n) | (x << (32 - n)) def shr(x, n): return x >> n def ch(x, y, z): return (x & y) ^ (~x & z) def maj(x, y, z): return (x & y) ^ (x & z) ^ (y & z) def sigma0(x): return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22) def sigma1(x): return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25) def gamma0(x): return rotr(x, 7) ^ rotr(x, 18) ^ shr(x, 3) def gamma1(x): return rotr(x, 17) ^ rotr(x, 19) ^ shr(x, 10) # 定义SHA-256哈希函数 def sha256(message): # 对消息进行预处理 message = bytearray(message) ml = len(message) * 8 message.append(0x80) while (len(message) * 8) % 512 != 448: message.append(0x00) message += ml.to_bytes(8, byteorder='big') # 初始化哈希hash_values = h.copy() # 对消息进行分组 for i in range(0, len(message), 64): # 将每个分组划分为16个字 words = [int.from_bytes(message[j:j+4], byteorder='big') for j in range(i, i+64, 4)] # 扩展16个字为64个字 for j in range(16, 64): s0 = gamma0(words[j-15]) s1 = gamma1(words[j-2]) words.append((words[j-16] + s0 + words[j-7] + s1) & 0xffffffff) # 初始化临时变量 a, b, c, d, e, f, g, h = hash_values # 进行64轮的压缩 for j in range(64): S1 = sigma1(e) ch_val = ch(e, f, g) temp1 = (h + S1 + ch_val + k[j] + words[j]) & 0xffffffff S0 = sigma0(a) maj_val = maj(a, b, c) temp2 = (S0 + maj_val) & 0xffffffff h = g g = f f = e e = (d + temp1) & 0xffffffff d = c c = b b = a a = (temp1 + temp2) & 0xffffffff # 更新哈希hash_values[0] = (hash_values[0] + a) & 0xffffffff hash_values[1] = (hash_values[1] + b) & 0xffffffff hash_values[2] = (hash_values[2] + c) & 0xffffffff hash_values[3] = (hash_values[3] + d) & 0xffffffff hash_values[4] = (hash_values[4] + e) & 0xffffffff hash_values[5] = (hash_values[5] + f) & 0xffffffff hash_values[6] = (hash_values[6] + g) & 0xffffffff hash_values[7] = (hash_values[7] + h) & 0xffffffff # 将哈希值转换为16进制字符串 return ''.join(format(hv, '08x') for hv in hash_values) ``` 使用示例: ```python message = b'Hello, world!' print(sha256(message)) # 输出:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值