[英]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.