3

私は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 文字のみを変更することで、セルフ チェックでプログラムを改善できるかどうかを確認してください。これは、「山登り」アルゴリズムのクラスのアルゴリズムの一種です。つまり、前の結果よりも優れている場合にのみ結果を保持します。

ただし、この山登りアルゴリズムが何であるか、既存のコードにどのように実装するかを理解することはできません。

この山登りアルゴリズムの実装方法を説明してください。どうもありがとうございました!

4

0 に答える 0