私はPythonを学ぶための本を読んでいますが、その本には次のいずれかの課題があります:
セルフチェック
これまでのすべてを本当にカバーするセルフチェックです。無限猿の定理について聞いたことがあるかもしれません。この定理は、サルがタイプライターのキーボードで無作為にキーを無限に打てば、ほぼ確実に特定のテキスト (ウィリアム シェイクスピアの全作品など) をタイプすることを示しています。さて、サルを Python 関数に置き換えたとします。Python 関数がシェークスピアの 1 文だけを生成するのにどれくらいの時間がかかると思いますか? 狙う文は「イタチのようだと思う」</p>
これをブラウザで実行したくないので、お気に入りの Python IDE を起動してください。これをシミュレートする方法は、アルファベット 26 文字とスペースからランダムな文字を選択して、28 文字の長さの文字列を生成する関数を作成することです。ランダムに生成された文字列を目標と比較して、生成された各文字列をスコアリングする別の関数を作成します。
3 番目の関数は generate と score を繰り返し呼び出し、文字が 100% 正しければ完了です。文字が正しくない場合は、まったく新しい文字列を生成します。プログラムの進行状況を簡単に追跡できるようにするために、この 3 番目の関数は、これまでに生成された最良の文字列と 1000 回の試行ごとのスコアを出力する必要があります。
次のコードを使用して、課題のこの部分を実装することができました:(私はpythonが初めてです)
import random
target = 'methinks it is like a weasel'
target_len = 28
def string_generate(strlen):
alphabet = 'abcdefghijklmnopqrstuvwxyz ' #26 letters of the alphabet + space
res = ''
for i in range(strlen):
res += alphabet[random.randrange(27)]
return res
def score_check(target,strlen):
score = 0
res = string_generate(strlen)
for i in range(strlen):
if res[i] == target[i]:
score += 1
return score, res
def progress_check():
counter = 0
score = 0
res = ''
while score != 28:
score_temp, res_temp = score_check(target, target_len)
counter += 1
if score_temp > score:
score, res = score_temp, res_temp
print(res, score)
else:
score, res = score, res
return res, score
progress_check()
次に、次の追加の課題があります。
セルフチェックチャレンジ
正しい文字を維持し、これまでのところ最適な文字列の 1 文字のみを変更することで、セルフ チェックでプログラムを改善できるかどうかを確認してください。これは、「山登り」アルゴリズムのクラスのアルゴリズムの一種です。つまり、前の結果よりも優れている場合にのみ結果を保持します。
ただし、この山登りアルゴリズムが何であるか、既存のコードにどのように実装するかを理解することはできません。
この山登りアルゴリズムの実装方法を説明してください。どうもありがとうございました!