2012-05-18 30 views
0

我明白,這是最簡單的檢查,最簡單的方法:測試迴文與嵌套循環

if val == val[::-1]: 
    print "yes" 
else: 
    print "no" 

只是練習,我想與嵌套的for循環(使用reversed()功能進行測試 - 我花了幾個小時,但不能完全到哪continuebreak得到它的權利:

for i in val: 
    for j in reversed(val): 
     if i == j: 
      break 
    break 
+0

爲什麼要將單詞的每個字母與迴文的每個字母進行比較? – jamylak

+0

'val [:: - 1]'<->'str(revers(val))' –

+0

@jamylak因爲我想學習繼續/休息。我想使用for循環內循環爲這excercise。 – 3zzy

回答

3

這應該這樣做:

for i, j in zip(val, reversed(val)): 
    if i != j: 
     print 'no' 
     break 
else: 
    print 'yes' 

編輯:非常感謝@jamylak指出for環路上的else子句。我一直在忘記!

但後來,我可能只是做:

print 'yes' if list(val) == list(reversed(val)) else 'no' 
+2

使用for循環打印yes和for循環使用'else'。或者,您可以使用'all(i == j for zip,zip(text,reverse(text)))' – jamylak

+0

使用for/else看起來就像是故意模糊處理。 – sneak

+1

@sneak,但OP已經有一個真正的方法來做到這一點。他正在尋找一個更麻煩的方法;) –

2
for i in range(len(val)/2): 
    if val[i] != val[-i-1]: 
     return False 
return True 
+1

我敢打賭,你沒有測試這個代碼,是嗎? –

+0

對不起。更正 – gefei

0

這不是嵌套循環的用例。當你想要比較每個元素與其他元素的每個元素時,嵌套循環很有用。 在你的情況下,你只想比較第一個位置和最後一個位置,第二個位置和第二個位置等等。 您需要執行此操作:

for i in range(len(val)/2): 
    if val[i] != val[-i-1]: 
     continue 
    else: 
     break 
+0

它與上面的答案相同,應該給予優先選擇作爲正確的答案。我只是用它來顯示繼續和中斷,也解釋了爲什麼嵌套循環不適合 –