s1 = request.args.get('s1', '')
s2 = request.args.get('s2', '')
if '' not in [s1, s2]:
if s1 == s2:
if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2)):
msg = "first"
else:
msg += "second"
else:
msg = "thrid"
else:
msg = 'fourth'
我想要这段代码打印“秒”。
我尝试了这些输入 s1 =“。0”和s2 =“0.00”
有人可以简要解释一下“if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2)):
”究竟是什么意思吗?
我理解它与字符串相等以及比较字符串上的ord()并想知道它们是如何不同的。
提前感谢您的帮助。
PS:请原谅缩进。 Python初学者在这里!答案 0 :(得分:0)
由于实习是一个实现细节,所以没有100%确定的方法可以将该段代码打印成第二位。
CPython在[-5, 256]
范围内实习整数,
所以你需要一个角色,当它被传递给ord
时会返回一些> 256。
>>> s1 = "asdሴ"
>>> s2 = "asdሴ"
>>> s1 == s2
True
>>> all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2))
False
all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2))
检查每个ord(c1)
是否与id
具有相同的ord(c2)
。
来自id
documentation:
返回对象的“标识”。这是一个整数,在该生命周期内保证该对象是唯一且恒定的。具有非重叠生存期的两个对象可能具有相同的id()值。
CPython实现细节:这是内存中对象的地址。
答案 1 :(得分:-1)
简单来说,if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2))
表示ord(s1[i])
的{{1}}和ord(s2[i])
的所有值,范围从i
到0
(其中) len(s1 or s2)
和c1
如果c2
和ord(s1[i])
的引用“对于这两个列表都相同
检查zip()
文件。根据文件:
zip()返回元组列表,其中第i个元组包含第i个元组 来自每个参数序列或迭代的元素。归来了 list的长度被截断为最短参数的长度 序列
例如:
ord(s2[i])
现在>>> l1 = [1, 2 ,3]
>>> l2 = [7, 8, 9]
>>> zip(l1, l2)
[(1, 7), (2, 8), (3, 9)]
将根据条件[ord(c1) is ord(c2) for c1, c2 in zip(s1, s2)]
返回True/False
值的元组列表,其中ord(c1) is ord(c2)
和c1
是c2
对tuple
返回的上一个元组列表。
现在是最后一部分。如果上面提到的zip()
值列表all()
的所有值都为True
,[ ... ]
将返回True/False
。如果任何单个项目为True
,则False
会将值返回为all()