Pythonで回文を調べようとしています。私が持っているコードは非常に for
ループを多用しています。
そして、C言語からPythonに移行するときに人々が犯す最大の間違いは、C言語のロジックをPythonで実装しようとすることだと思いますが、これでは動作が遅くなり、言語を最大限に活用できません。
これ](http://hyperpolyglot.org/scripting)のサイトを見てみるとSearch for "C-style for"で、PythonにはC-style forループがないことが書かれています。時代遅れかもしれませんが、Pythonには独自の手法があるということだと解釈しています。
いろいろと調べてみましたが、最新(Python3)のアドバイスはあまり見つかりませんでした。Pythonでforループを使わずに回文の課題を解くにはどうしたらいいですか?
授業ではCでやったことがありますが、個人的にはPythonでやりたいです。問題はEuler Projectのものです。素晴らしいサイトですね ところで、。
def isPalindrome(n):
lst = [int(n) for n in str(n)]
l=len(lst)
if l==0 || l==1:
return True
elif len(lst)%2==0:
for k in range (l)
#####
else:
while (k<=((l-1)/2)):
if (list[]):
#####
for i in range (999, 100, -1):
for j in range (999,100, -1):
if isPalindrome(i*j):
print(i*j)
break
ここでは、たくさんのコードが抜けています。5つのハッシュは自分のための備忘録です。
具体的な質問です。
1.C言語では、インデックス0とインデックスmaxを比較するforループを作り、インデックス0+1とmax-1を比較して、何かが出るまで繰り返しますよね。これをPythonで行うにはどうすればよいでしょうか?
2.私のforループ(in in in range (999, 100, -1))は、Pythonでは良くない方法でしょうか?
3.3. 誰か、私のような立場の人のために、良いアドバイスや良いウェブサイト、リソースを持っていませんか?私はプログラマーではありませんし、そうなりたいとも思っていません。ただ、学士号(電気工学)の論文を書くときに、プロジェクトで良い結果を出そうとしながら、適用可能なプログラミング言語を同時に学ぶ必要がないように、十分な知識を身につけたいと思っています。
4.この問題を解決するための具体的なコードがあれば教えてください。私は3つの状況を想定しています。値が0または1桁の場合、奇数長の場合、偶数長の場合です。私はforループを書こうと思っていたのですが・・・。
追記:問題は2つの3桁の整数の最大値の積で、回文でもあるものを求めよ。
直感的ではない [::-1]
構文の代わりに、次のようなものがあります。
>>> test = "abcba"
>>> test == ''.join(reversed(test))
True
reversed関数は、
test`に含まれる文字を反転させた配列を返します。
''.join()
は、これらの文字を間に何も挟まずに再び結合します。
pythonのすごいところは、pythonでできることです。 文字列にインデックスを使う必要はありません。
以下のように動作します(スライスを使用)。
def palindrome(n):
return n == n[::-1]
これは、単純に n を反転させて、それらが等しいかどうかをチェックします。 n[::-1]` は n を反転させます (-1 はデクリメントを意味します)
因みに、Pythonではこの方法は良くないのでしょうか?
上記については、rangeではなく、xrange
を使いたいところです(rangeは実際のリストを作成しますが、xrangeは高速なジェネレータですから)。
質問3に対する私の意見)
私はPythonの前にC言語を学んだのですが、ただドキュメントを読み、コンソールを使って遊んでいました。(そして、Project Eulerの問題もやってみました。)