2013-06-22 77 views
1

所以我目前正在試圖確定,着眼於兩個字符串,並告知用戶,如果一個字符串位於其他用戶的功​​能,它看起來像這樣:我遇到麻煩了(X)在(Y)函數

def isIn(x, y): 

    for x in y: 
     if x == y: 
      print "True" 
      print "x in y" 
     else: 
      print "False" 

    for y in x: 
     if x == y: 
      print "True" 
      print "y in x" 
     else: 
      print "False" 

isIn('5', '1') 

我認爲它與for(x)in(y)函數有關,但我可能是錯的。該代碼不斷提出:

True 
x in y 
True 
y in x 

任何建議,我怎麼能解決這個問題?

回答

3

我想你混淆for ... in與只是普通in;

def isIn(x,y): 

    if x in y: 
    print "True" 
    print "x in y" 
    else: 
    print "False" 

    if y in x: 
    print "True" 
    print "y in x" 
    else: 
    print "False" 

isIn('5','1') 
+0

謝謝!我的功能現在是功能。 – TrigonDark

1

你有一些問題,在這裏循環:

for x in y: 
    # at this point, x is the first element of '1', so both x and y are '1' 
    # thus, x == y, which explains the behavior that you see 

同上,用於第二循環

2
for x in y: 

x這裏就不傳遞給函數的x。同爲:

if x == y: 

xfor循環將遍歷y,將是1。然後你將它與y比較,這也是1。所以,你會得到預期的輸出:

True 
x in y 

同爲第二循環

3

怎麼樣簡單的東西?

def isIn(x, y): 
    return x in y or y in x 

如果我們處理的是整個字符串,我們想知道,如果一個是另一個的一部分,沒有必要遍歷每個字符他們的 - 這隻會告訴你,如果一些字符是在兩個字符串中。現在

如果你真的需要知道,如果一些焦炭是兩個字符串,這將很好地做:

def isIn(x, y): 
    return any(c in y for c in x) 
0

你的問題是幾乎可以肯定的是你的代碼不會做你認爲它的作用:

def isIn(x, y): 

    for x in y: 
     pass # abbreviated for brevity. Makes no difference here 

    for y in x: 
     pass #ditto 

你的第一個for x in y順序分配給xy每個元素。最後,x留在y的最後一個值。然後,你的下一個循環重複使用的變量名y,並依次結合它在x從以前的循環中的最後一個值的每個元素。

因爲一個串中的每個元素是長度爲1的串,因此這是這不會導致在你的例子的誤差可迭代(但只得到一個單一的對象,它是值等於本身)。