5

我目前正在研究回文检测器(anna、lol、hahah 等),我被要求使用 for 循环。

我希望程序遍历两个字符串(在比较值时定期和同时向后读取它们)。如果值相同,则回文为 True;如果不是,则为 False。

我的问题是:如何让两个 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

谢谢您的帮助!

编辑:描述问题时我可能不够清楚。该程序这样做:它让用户输入一串文本(例如你好,我的名字是 lol),并且该程序旨在查看这是否是回文。它分为三个功能(和一个主要功能)。

功能编号 1 修复了文本,使其仅简化为字符和数字(因此 LOL,,,,,, 变为 lol 以便于阅读)。函数编号 2 旨在测试(使用 for 循环(!))输入是否为回文。功能号 3 只是要发布它是否是回文。

必须为此使用 for 循环,我不能简单地进行比较,例如:backwardtext = text.reverse() if backwardtext == text: print ("It is a palindrome")

我希望这能解决问题。

4

4 回答 4

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]
于 2012-12-20T15:57:00.143 回答
3

您可以使用zip().

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

zip()函数并行迭代两个可迭代对象,在最短的结束处停止:

>>> list(zip("abc", range(10)))
[('a', 0), ('b', 1), ('c', 2)]
于 2012-12-20T15:57:45.190 回答
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)
于 2012-12-20T16:55:25.930 回答
0

只需将其与自身向后比较即可。(在 Python 3.2 中运行)

>>> text = "Palindrome"
>>> text[::-1]
'emordnilaP'
>>> text == text[::-1]
False
>>> text = "PalindromemordnilaP"
>>> text == text[::-1]
True
于 2012-12-20T19:38:51.410 回答