2012-12-20 12 views
5

私は現在、palindrome-detector(anna、lol、hahahなど)で作業していますが、for-loopsを使用するように要求されています。for-loop in Python 3.0

私は、プログラムが2つの文字列をループするようにしたい(値を比較しながら同時に規則的に読み返しをする)。値が同じ場合、回文はTrueです。もしそうでなければ、それは偽です。

私の質問は、2つのfor-loopを同時に実行して文字列の値を比較する方法です。現在、このような何かやっ

:(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 

はあなたの助けをありがとう!

EDIT:問題を説明するときに私は十分に明確ではないかもしれません。プログラムはこれを行います: これはユーザーにテキストの文字列(hello my name is lolなど)を入力させ、プログラムはこれが回文かどうかを確認するように設計されています。 3つの機能(および主機能)に分かれています。

機能番号1は、文字と数字だけになるようにテキストを修正します(読みやすくするため、LOL ,,,,,,はLOLになります)。 機能番号2は、入力が回文である場合にテストするように設計されています(for-loops(!)を使用)。 ファンクション番号3は、単にそれが回文かどうかを問わず投稿する予定です。

私はこのためにforループを使用するを持っていると私は単にのような比較はできません:backwardtext場合 backwardtext = text.reverse() を==テキスト: プリント(「それは回文です」)

これが問題を解決することを希望します。

あなたは(あなたの項目が割出し提供される)たぶん少し低いレベルのアプローチは、インデックスをループになりzip

s = 'hannah' 

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

を使用

答えて

8

:将来の訪問者のための

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

全部。 – Will

+0

@Will - ここでもっとも簡単なのは 's == s [:: - 1]'です。それは明らかに最も有名です。しかし、ループは問題の制約の一部として述べられています。 OPが「zip」が何をし、どのように動作するのかを理解することは重要です。多分それは課題が得ているものの一部です。 'map'と' all'を投げ込むことはそれを助けるつもりはありません。 :) – mgilson

+0

これは明らかにループ構造の知識を得ることを目的としたプログラミング作業です。私はいくつかのケースで明示的なループはマップ/リダクションスタイルのプログラミングを使用して完全に削除できることを指摘しようとしていました。 – Will

3

zip()を使用できます。最短の終わりで停止平行に2つのイテレート可能オブジェクト上

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)] 
+0

文字列はモジュール内のビルドの名前です –

+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で実行します。私は質問者がfor`を使用するループが、これに改良を `for`ループの必要性を除去するために、` `ALL`とmap`関数を使用することであろう`を求めることを知る2)

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