2016-10-22 97 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