2016-10-22 69 views
-7
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' 

我想要这段代码打印“秒”。python-字符串相等和ord()比较?

我想这些输入 S1 =” .0" 和s2 = “0.00”

任何人都可以请简要解释什么是 “if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2)):” 的意思是什么呢?

我知道它涉及到字符串的相等性以及比较字符串的ord()并想知道它们是如何不同的。

在此先感谢您的帮助。

附注:请谅解缩进。 Python初学者在这里!

+2

请不要删除您的[消极接收的问题](http://stackoverflow.com/questions/40198062/python-strings-equality- and-ord-comparison#40198062)只是为了抹黑和批评。 – TigerhawkT3

+1

您拥有3k +的声望,但仍然没有在代码中正确缩进。你应该知道如何现在问这个问题。 –

+0

@anonymous:我没有用python编程,请原谅缩进。就此而言,我甚至在我的问题中提到过。 – Aditya

回答

0

由于interning是一个实现细节,所以没有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)

iddocumentation

返回的对象的“身份”。这是一个整数,它在其生命周期中保证对这个对象唯一且恒定。具有非重叠生命周期的两个对象可能具有相同的id()值。

CPython实现细节:这是内存中对象的地址。

+0

问题是询问片段的含义,而不是如何让它打印出某个结果。 – TigerhawkT3

-1

在普通的英语,if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2))意味着ord(s1[i])所有值和ord(s2[i])i0len(s1 or s2)(其中c1c2如果ord(s1[i])ord(s2[i])基准)是相同两者的列表

检查zip()文件。按照该文件:

拉链()返回元组的列表,其中第i个元组包含来自每个参数序列或iterables的第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)其中c1c2tuple对来自zip()返回的元组的前一个列表。

现在是最后一部分。如果all()将返回True,如果上面提到的True/False值的列表[ ... ]将具有所有值为True。如果任何单个项目为False,all()将返回值为False