2012-12-20 70 views
5

我目前正在研究迴文檢測器(anna,lol,hahah等),並要求使用for-loops。Python 3.0中的For-loops

我希望程序循環兩個字符串(在比較值的同時定期和反向讀取它們)。如果值相同,則迴文是真;如果沒有,它是假的。

我給你的問題是:你如何得到兩個for循環同時運行並比較字符串的值?

目前做這樣的事情:(Python的3.0),可以根據需要發佈整個代碼:

palindrom = True 
text2 = ("") 
for i in nytext: 
    for i in nytext[::-1]: 
     text2 = (nytext[::-1] + i) 
     if text2 == nytext: 
      palindrom = True 
     else: 
      palindrom = False 
return palindrom 

謝謝您的幫助!

編輯:我在描述問題時可能不夠清楚。該程序執行以下操作: 它允許用戶輸入一串文本(例如hello my name is lol),並且該程序旨在查看這是否是迴文。 它分爲三個功能(和一個主要功能)。

函數1修復了文本,所以它只能被縮減爲字符和數字(所以LOL ,,,,,,變成了lol以方便閱讀)。 功能編號2旨在測試(使用for-loops(!))輸入是迴文。 函數3只是要發佈它是否是迴文。

使用for循環爲這個,我不能簡單地做一個比較,如: backwardtext = text.reverse() 如果backwardtext ==文字: 打印(「這是一個迴文」)

我希望這可以解決問題。

回答

8

您使用zip

s = 'hannah' 

for c_forward,c_backward in zip(s,s[::-1]): 
    ... 

也許稍低的辦法是環比指標(只要你的項目是可索引):

for i in range(len(s)): 
    c_forward = s[i]  #character as you loop going forward 
    c_backward = s[-(i+1)] #character as you loop going backward 
    pass #TODO: determine if palindome ... :-p 

對於未來的訪客,這些不要解決問題中的所有約束,但檢查一個字符串是否是Python中的迴文的最簡單方法是簡單地執行:

def ispal(s): 
    return s == s[::-1] 
+0

我知道提問者詢問'for'循環使用,但在這方面的一個改進是使用'all'和'map'功能,不需要用一個'for'循環共。 – Will

+0

@願意 - 這裏最簡單的事情就是做's == s [:: - 1]'。這顯然是最pythonic。然而,循環被稱爲問題約束的一部分。 OP對了解'zip'的作用以及它的工作原理非常重要。也許這是作業的一部分。在「地圖」和「全部」投擲是不會有幫助的。 :) – mgilson

+0

這顯然是一個旨在獲得循環結構知識的編程任務。我只是想指出,在某些情況下,顯式循環可以通過使用map/reduce樣式編程完全刪除。 – Will

3

您可以使用zip()

def is_palindrome(string): 
    return all(x == y for x, y in zip(string, reversed(string))) 

zip()功能迭代兩個並聯iterables,在最短結束時停止:

>>> list(zip("abc", range(10))) 
[('a', 0), ('b', 1), ('c', 2)] 
+0

字符串是在模塊中構建的ussualy名稱 –

+1

@ralu:但是由於Python使用詞法範圍,所以可以使用與模塊名稱衝突的局部變量。 –

0
def is_palindrome(txt): 
    for i, a in enumerate(txt): 
     if a!=txt[-(i+1)]: 
      return False 
    return True 

txt = 'hannah' 
print txt, is_palindrome(txt) 
0

只要將它向後與其自身進行比較。 (在Python 3中運行。2)

>>> text = "Palindrome" 
>>> text[::-1] 
'emordnilaP' 
>>> text == text[::-1] 
False 
>>> text = "PalindromemordnilaP" 
>>> text == text[::-1] 
True