繁体   English   中英

Python 3.0中的For循环

[英]For-loops in Python 3.0

我目前正在研究回文检测器(anna,lol,hahah等),我被要求使用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我的名字是lol),该程序旨在查看这是否是回文。 它分为三个功能(和一个主要功能)。

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

必须为此使用for循环,我不能简单地进行比较,例如:backwardtext = text.reverse()if backwardtext == text:print(“它是回文”)

我希望这可以解决问题。

你用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]

你可以使用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)]
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)

只需将它与自身倒退即可。 (在Python 3.2中运行)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM