練習41-勉強して相手に向かって話す-愚かな法学Python 3

7702 ワード

練習41.相手に向かって話すことを学んでいる.
この練習では、「相手向け」の言い方を教えてあげます.私がしたことは、あなたが理解しなければならない言葉と定義をあげることです.それから私はいくつかの埋めなければならない文をあげてあなたに理解させます.最後に、脳の中でこれらの文を強固にするために、大きな練習をしなければなりません.
語彙訓練
(注:分かりやすいように、英語の原文を保持することを定義します.)
クラス(class):Pythonに新しいタイプのものを作成するように伝えます(Tell Python to make a new type of thing).
オブジェクト(object)の2つの意味:最も基本的なタイプのもの、いかなるインスタンス.(the most basic type of thing, and any instance of something.)
インスタンス(instance):Pythonにクラスを作成するように言ったときに得られたもの.(What you get when you tell Python to create a class.)
def:クラスで関数を定義する方法.(How you define a function inside a class.)
self:クラスの関数では、selfはアクセスされるインスタンス/オブジェクトの変数です.(Inside the functions in a class, self is a variable for the instance/object being accessed.)
継承(inheritance):あるクラスが別のクラスからその特徴を継承できる概念について、あなたとあなたの両親に似ています.(The concept that one class can inherit traits from another class, much like you and your parents.)
コンビネーション(composition):1つのクラスが他のいくつかのクラスから構成できる概念について、1台の車がいくつかの車輪を含んでいるように見えます.(The concept that a class can be composed of other classes as parts, much like how a car has wheels.)
属性(attribute):クラスが持つ組合せから得られる特性で、通常は変数です.(A property classes have that are from composition and are usually variables.)
is-a:あるものが一つのものから受け継がれていることを表す表現で、「サーモンは魚」のようなものです.(A phrase to say that something inherits from another, as in a “salmon” is a “fish.”)
has-a:あるものがいくつかのものから構成されているか、ある特性を持っていることを表現するための表現で、「サーモンには口がある」のようなものです.(A phrase to say that something is composed of other things or has a trait, as in “a salmon has-a mouth.”)
これらの用語のためにフラッシュカード(flash cards)を作って覚えてください.この練習を完成する前に単純な記憶には意味がありませんが、これらの基礎的な語彙を理解しなければなりません.
フレーズトレーニング
次はPythonコードのクリップと右側の説明です.class X(Y):Xという名前のクラスを作成し、Yから継承します.(“Make a class named X that is-a Y.”) class X(object): def __init__(self, J)クラスXにはselfとJパラメータを持つ__init__関数がある.(“class X has-a __init__ that takes self and J parameters.”) class X(object): def M(self, J):クラスXにはselfとJパラメータを持つM関数がある.(“class X has-a function named M that takes self and J parameters.”) foo = X():fooをクラスXの一例とする.(“Set foo to an instance of class X.”) foo.M(J) fooからM関数を取得し、selfおよびJパラメータを使用して呼び出す.(“From foo, get the M function, and call it with parameters self, J.”) foo.K = Q fooからK属性を取得し、Qとする.(“From foo, get the K attribute, and set it to Q.”)
上記の各文の中で、X、Y、M、J、K、Q、fooを見ると、スペースとして書くことができます.例えば、私はこれらの文を書くことができます.
  • "Make a class named???that is-a Y."(Yから継承される???というクラスを作成します.)
  • “class ??? has-a __init__ that takes self and ??? parameters.” (クラス???selfと???パラメータが付いた__init__があります.)
  • “class ??? has-a function named ??? that takes self and ??? parameters.” (クラス???には??という関数があります.この関数にはselfと???の2つのパラメータがあります.)
  • “Set foo to an instance of class ???.” (fooをクラス???の一例とする.)
  • “From foo, get the ??? function, and call it with self=??? and parameters ???.” (fooから???関数を取得し、self=???およびパラメータ???で呼び出します.)
  • “From foo, get the ??? attribute, and set it to ???.” △fooから???属性を取得し、???に設定します.

  • 同様に、これらのフレーズをいくつかのフラッシュカードに書いて、メモします.Pythonコードの断片を正面に置いて、説明の文を背面に置いて、毎回すべてのフレーズの意味を正確に言わなければなりません.似ていればいいのではなく、そっくりです.
    総合訓練
    最後の準備は語彙訓練とフレーズ訓練を結びつけることです.以下は訓練内容です.
  • フレーズカードを作って記憶を練習します.
  • それをひっくり返して、文を読んで、文の中で語彙の訓練の中の語彙を見たら、相応の語彙のカードを見つけます.
  • これらの語彙カードを記憶する練習をします.
  • 練習を続けて、少し疲れたら、休んでから続けます.

  • 読み取りテスト
    今、私は小さなPythonスクリプトを持っていて、これらの語彙とフレーズをマスターし、無限に実行することができます.このスクリプトは簡単です.urllibという図書館で単語をダウンロードすることを理解できるはずです.以下はスクリプトコードです.oop_に入力する必要があります.test.pyこのファイルで使用します.
    ex41.py
    1   import random
    2   from urllib.request import urlopen
    3   import sys 
    4
    5   WORD_URL = "http://learncodethehardway.org/words.txt"
    6   WORDS = [] 
    7
    8   PHRASES = {
    9       "class %%%(%%%):":
    10          "Make a class named %%% that is-a %%%.",
    11      "class %%%(object):
    \tdef __init__(self, ***)" : 12 "class %%% has-a __init__ that takes self and *** params.", 13 "class %%%(object):
    \tdef ***(self, @@@)": 14 "class %%% has-a function *** that takes self and @@@ params.", 15 "*** = %%%()": 16 "Set *** to an instance of class %%%.", 17 "***.***(@@@)": 18 "From *** get the *** function, call it with params self @@@.", 19 "***.*** = '***'": 20 "From *** get the *** attribute and set it to '***'." 21 } 22 23 # do they want to drill phrases first 24 if len(sys.argv) == 2 and sys.argv[1] == "english": 25 PHRASE_FIRST = True 26 else: 27 PHRASE_FIRST = False 28 29 # load up the words from the website 30 for word in urlopen(WORD_URL).readlines(): 31 WORDS.append(str(word.strip(), encoding="utf-8")) 32 33 34 def convert(snippet, phrase): 35 class_names = [w.capitalize() for w in 36 random.sample(WORDS, snippet.count("%%%"))] 37 other_names = random.sample(WORDS, snippet.count("***")) 38 results = [] 39 param_names = [] 40 41 for i in range(0, snippet.count("@@@")): 42 param_count = random.randint(1,3) 43 param_names.append(', '.join( 44 random.sample(WORDS, param_count))) 45 46 for sentence in snippet, phrase: 47 result = sentence[:] 48 49 # fake class names 50 for word in class_names: 51 result = result.replace("%%%", word, 1) 52 53 # fake other names 54 for word in other_names: 55 result = result.replace("***", word, 1) 56 57 # fake parameter lists 58 for word in param_names: 59 result = result.replace("@@@", word, 1) 60 61 results.append(result) 62 63 return results 64 65 66 # keep going until they hit CTRL-D 67 try: 68 while True: 69 snippets = list(PHRASES.keys()) 70 random.shuffle(snippets) 71 72 for snippet in snippets: 73 phrase = PHRASES[snippet] 74 question, answer = convert(snippet, phrase) 75 if PHRASE_FIRST: 76 question, answer = answer, question 77 78 print(question) 79 80 input("> ") 81 print(f"ANSWER: {answer}

    ") 82 except EOFError: 83 print("
    Bye")

    このスクリプトを実行して、「オブジェクト向けのフレーズ」で自然言語に翻訳してみると、フレーズ辞書には2つの形式があり、正しいものを入力するだけでいいのがわかります.
    自然言語からコードへの練習
    次に、「english」オプションを使用してこのコードを実行し、反対の方法で練習する必要があります.
    $ python oop_test.py english
    

    これらのフレーズはいくつかのくだらない話を使って、これらのコードを読むことを学ぶ一部の原因は、これらの変数とクラスの名前にこんなに多くの意味を与えないようにすることです.通常、「cork」(軟木栓)のような言葉を見ると、その意味に困惑します.上記の例では、「cork」はランダムに選択されたクラスの名前にすぎません.あまり意味を与えないで、私が教えてあげた方法で対応してみてください.
    より多くのコードを読む
    より多くのコードを読み続け、前に学んだフレーズを復習する必要があります.クラスを含むファイルをできるだけ多く見つけて、次のようにしてみましょう.
  • は、各クラスの名前と、他のクラスがそこから何を継承しているかを示します.
  • 各クラスの下に、その所有する関数とそのパラメータがリストされます.
  • はselfで使用されるすべての属性をリストします.
  • は、各属性について、どのクラスから継承されるかを示す.

  • これらの練習の目的は、実際のコードを1回試して、あなたが学んだフレーズとそれらの使い方を一致させて関連付けてみます.トレーニングを十分にすれば、分からないスペースや文字ではなく、これらのマッチングモード(match patterns)が呼び出され始めます.
    よくある質問result = sentence[:]は何に使いますか.これはPythonがリストをコピーする方法です.リストのスライス構文[:]を使用し、最初の要素から最後の要素までのリストスライスをすばやく作成できます.
    このスクリプトは実行しにくいですね.これまで正常に動作させることができるはずです.確かにいくつかの小さな場所が煩わしいですが、複雑ではありません.今まで学んだことでデバッグしてみてください.各行を入力し、私とそっくりであることを確認し、分からないところに遭遇したらネットで調べます.
    やっぱり難しい!あなたはこのようにすることができます.ゆっくり叩いて、1文字ずつ叩いて、しかし正確さを保証して、それから各語の意味を理解します.