「手をつないでPythonを学ぶ」18ループステートメント

前回の記事「LearningPythonwith You」の17ループ終了では、ブレークとコンティニューの2つのループ終了方法を学び、同時にループ終了方法を使用してゲームプログラムを最適化しました。

今日、私たちが学ぼうとしているのは、別のループステートメント-forループです。forループはどのくらい重要ですか?このように言えば、forループを必要としないプログラムはないかもしれません。したがって、一生懸命働き、forループを上手に学ぶと、私たちのスキルはより高いレベルに到達できるようになります。

まず、forループの役割といくつかの概念を理解しましょう。

forループは、コレクション(文字列、リスト、タプル)またはイテレータを「トラバース」するために使用されます。

「トラバーサル」が二重引用符で囲まれている理由は、この単語が非常に一般的であるため、「トラバーサル」という単語がforループ用にカスタマイズされていると思うためです。意味の観点から、トラバーサルは1つずつ読むこととして理解できます。オブジェクトの観点からは、トラバースされたオブジェクトはコレクションまたはイテレーターであり、同時に、コレクションまたはイテレーターのみが「トラバース」できます。

コレクションのタイプは、文字列、リスト、またはタプルにすることができます。文字列については前に説明しましたが、文字列をトラバースすると、文字列内の各文字が1つずつ読み取られます。リストについてはまだ話していませんが、すでに触れています。[1、2、3、4、5]のように角括弧で囲まれたいくつかの要素のコレクションです。リストをトラバースすることは、リスト内の各要素を1つずつ読み取ることです。タプルは、後で説明する概念でもあります。これは、(1、2、3、4、5)のように括弧で囲まれたいくつかの要素のコレクションです(最初にタプルの概念を知る必要はありません)。タプルをトラバースすることは、タプル内の各要素を1つずつ読み取ることです。

イテレータの概念はもう少し複雑なので、簡単に理解できます。反復はコレクションの要素にアクセスする方法であり、反復子はトラバースする場所を記憶できるオブジェクトです(Pythonはすべてがオブジェクトです)。イテレータオブジェクトは、コレクションの最初の要素からすべての要素にアクセスするまでアクセスされます。前に進むことはでき、戻ることはできません。したがって、トラバーサルのプロセスは反復であり、トラバーサルのオブジェクトはイテレーターです。

概念を理解した後、forループの構造を見てみましょう。forループはfor ... else ...で構成され、else部分も省略できます。

for 元素 in 集合:
    执行语句1
else:
    执行语句2

whileループとは異なり、whileループの判定条件はforループの反復処理に変更されます。whileループは、判定条件に基づいてループの数を決定し、forループは、セット内の要素の数に基づいてループの数を決定します。

whileループはフォーマット要件(コロンとインデント)と同じですが、elseは省略でき(forループは一般的にelseの構造を省略するために使用されます)、breakとcontinueを使用してループを終了することもできます。終了ルールは同じです(breakはループ全体を終了し、現在のループを終了し続けます)。

forループの文の構造は自然言語に翻訳され、次のように表現できます。

コレクション内の要素ごとに、ステートメント1を実行し、コレクションをトラバースした後、ステートメント2を実行します。

自然言語の観点からは、forループのプロセスは理解しやすいですが、難しいのは収集とトラバーサルの概念かもしれません。次に、forループ内のさまざまなタイプのコレクションに応じたいくつかの例を示します。これにより、さまざまなタイプのコレクションのトラバーサルプロセスとトラバーサル効果を直感的に体験できます。

文字列は私たちがこれまでに最もよく知っているタイプなので、文字列から始めます。

1.ストリング

文字列は文字で構成されているため、文字列の要素はこれらの文字です。forループのコレクションとして文字列をトラバースする場合、文字列の各文字を左から右に1つずつ読み取ります。

forループ構造を紹介したばかりのとき、実際には言及されていない別の重要なポイントがありました。これは、forループの「forelement in set」の反復ステートメントにあります。「element」は実際にはセット内の要素ではありませんが、トラバーサルプロセスを全員に理解させるために「forelementinset」と記述されています。お気に入り。

実際、「セット内の要素の場合」では、要素の位置は変数名です。各反復で、変数名はセット内の各要素の値に周期的に割り当てられます。セットが文字列の場合、この変数は文字列内のすべての文字に割り当てられます。セットがリストまたはタプルの場合、この変数はリストまたはタプル内のすべての要素に割り当てられます。

例として文字列を取り上げて、トラバーサル、割り当て、ループのプロセスを一緒に見てみましょう。

In [1]: str = "Hello World!"   # 集合是字符串,每一个字母、空格、标点符合都是一个字符,或者说是一个元素
        for letter in str:   # letter是一个变量名,可以起任何的变量名,只是为了程序好阅读,才根据元素的内容,起名叫做letter
            print(letter)   # 每一次循环,变量letter就会被赋值成一个字符(元素)的值,并执行print()
Out[1]: H
        e
        l
        l
        o
        
        W
        o
        r
        l
        d
        !

上記の例では、セットは「HelloWorld!」(「」を含まない)です。トラバーサルプロセスは、セット内の各文字(要素)の値を1つずつ読み取ることです。つまり、H、e、l、l、o 、、 W、o、r、l、d 、!です。次に、各ループで、これらの値を変数文字に1つずつ割り当て、最後にprintを実行します。

この例は比較的単純ですが、非常に直接的でもあります。トラバーサルと割り当てのプロセスを少し理解できるはずです。まだ理解していないかどうかは関係ありません。誰もが理解できるように、多くの例があります。

以下はもう少し難しい例です。1つは文字列にエスケープ文字を追加する方法です。トラバースする方法を見てみましょう。2つ目は2つのループ終了条件、continueとbreakを追加する方法、3つ目はelseを追加する方法です。 、それが機能するかどうか見てみましょう。

In [2]: str = "\\Hello World!\n"   # 转义字符不会被当做两个字符处理的,遍历时\\就是一个字符\,\n也就是一个回车符(打印出来是一行空行)
        for abc in str:   # 随机换了一个别的变量名,也是一样的,说明变量名和遍历的元素是没有关系的,不是因为变量名是letter,才按照字母遍历的
            print("该次遍历打印的字符是:{},".format(abc), end='')
            if abc == 'o' or abc == 'r':
                print("即将执行continue,不会打印下面那句话,循环继续。")
                continue
            if abc == 'd':
                print("即将执行break,不会打印下面那句话和else,循环终止。")
                break
            print("会打印这句话,循环继续。")
        else:   # else因为也是循环结构内的一部分,会被break终止,不会运行
            print("打印完成")
Out[2]: 该次遍历打印的字符是:\,会打印这句话,循环继续。
        该次遍历打印的字符是:H,会打印这句话,循环继续。
        该次遍历打印的字符是:e,会打印这句话,循环继续。
        该次遍历打印的字符是:l,会打印这句话,循环继续。
        该次遍历打印的字符是:l,会打印这句话,循环继续。
        该次遍历打印的字符是:o,即将执行continue,不会打印下面那句话,循环继续。
        该次遍历打印的字符是:,会打印这句话,循环继续。
        该次遍历打印的字符是:W,会打印这句话,循环继续。
        该次遍历打印的字符是:o,即将执行continue,不会打印下面那句话,循环继续。
        该次遍历打印的字符是:r,即将执行continue,不会打印下面那句话,循环继续。
        该次遍历打印的字符是:l,会打印这句话,循环继续。
        该次遍历打印的字符是:d,即将执行break,不会打印下面那句话和else,循环终止。

上記の例は少し複雑ですが、実際には2つの部分として見ることができます。1つはループの走査プロセスであり、エスケープ文字が追加されていることを除いて、最初の例と大差ありません。2番目の部分は、ループステートメントの終了です。これは、前の記事で示した例と同様です。

文字列がコレクションとしてどのようにトラバースされるかを理解した後、リストをもう一度見てみましょう。

2.リスト

リストはまだ学習していませんが、以前のいくつかの例で使用しました。リストは、角括弧で囲まれた要素の順序付けられたグループです。これで、誰もがリストをコンテナとして理解できます。コンマで区切られた要素には、数値、文字列、変数など、さまざまな種類があります。

簡単な例として、リストがコレクションとしてどのようにトラバースされるかを見てみましょう。以前にループとelseインスタンスの終了を示したので、後でトラバーサルプロセスにさらに焦点を合わせるために、複雑なインスタンスを作成しなくなりました。

In [3]: a = 'Python'
        lst = [1, 'a', 2, 'b', a, '3']   # 第5个元素a是个变量,第6个元素'3'是字符串不是数字
        for a in lst:   # 变量名虽然是可以随便起的,但建议在程序中,还是使用有意义的变量名
            print(a)
Out[3]: 1
        a
        2
        b
        Python
        3

上記の例では、「a」は合計5回出現しますが、「a」ごとに意味や機能が異なります。

最初の「a」は変数名であり、その値は文字列「Python」であり、これは割り当てプロセスです。

2番目の「a」は文字列です。

3番目の「a」と最初の「a」は両方とも同じ変数を参照します。これが参照変数aの値です。

4番目の「a」も変数名であり、セット内の各要素に割り当てられます。現時点では、最初の「a」の割り当て結果は無効ですが、プログラムの2行目を実行した後、lstの値が[1」になっているため、リスト内の要素の値には影響しません。 a '、2、' b '、' Python '、' 3 '];

5番目の「a」と4番目の「a」は同じ変数を参照し、変数aの値も参照します。

3.タプル

タプルも後で説明するデータ構造なので、ここではあまり関与したくありません。その形式は、括弧で囲まれた要素の順序付けられたグループです。したがって、上記のセットとしてのリストの内容は、角括弧が括弧になっている限り、タプルの場合とまったく同じです。

これについて言えば、さまざまなタイプのコレクションは終了しましたが、導入する必要があるforループで最も一般的に使用される別のトラバーサル方法があります。「型」ではなく「メソッド」と呼ばれるのは、このメソッドの本質がリストであるため、リストを式として簡単に生成できる関数を使用しているためです。この関数はrange()です。

4. Range()関数

以前は、forループトラバーサルのプロセスを説明するために、与えられた例は要素を表示することであり、要素のタイプは、すべての人の思考を拡大するために可能な限り多様でした。しかし実際には、forループを適用する場合、最も一般的に使用されるのは、一連の数値をトラバースすることです。たとえば、次の図は、forループを使用して一連の数値をトラバースすることによって実装されています。

In [4]: for num in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
            print(' ' * (9 - num), '* ' * num, ' ' * (9 - num), sep='')
Out[4]:         *         
               * *        
              * * *       
             * * * *      
            * * * * *     
           * * * * * *    
          * * * * * * *   
         * * * * * * * *  
        * * * * * * * * *

ここでの数列はリストを使用していますが、各要素は引き続き表示されます。要素の数が比較的少ない場合は問題ありません。数が多い場合、または数の変更ルールがより複雑な場合、これはあまり便利ではありません。このとき、range()関数が出てくる必要があります。

range()関数の役割は、整数のリストを生成することです。その基本的な文法式は次のとおりです。

range(start_num、end_num、step)

Pythonは左閉右開ルールを使用するため、start_numは数列の開始番号です(数を数個書く)。stepはステップサイズ、つまり数列の各番号間の間隔値です。 end_numは、数列の最後の数値です。数値は値を超えたり等しくなったりすることはありませんが、最終的な数値はstar_numとstepによって計算する必要があります。

strat_numのデフォルト値は0で、stepのデフォルト値は1です。したがって、range(end_num)のみが書き込まれる場合、デフォルトでは0からend_num-1までの数列が生成されます。たとえば、range(10)は[0、1、2、3、4、5、6、7、8、9]と同等です。

stepを省略し、range(strat_num、end_num)のみを書き込むと、strat_numからend_num-1までの整数列が生成されます。たとえば、range(-5、10)は、[-5、-4、-3、-2、-1、0、1、2、3、4、5、6、7、8、9]と同等です。

すべてのパラメーターが設定されると、start_numから開始し、stepの増分(stepが負の数の場合は負の増分)に従ってend_numまでシーケンスを生成しますが、最後の数値をend_numと等しくしたり、end_numを超えたりすることはできません。たとえば、range(-5、10、3)は[-5、-2、1、4、7]と同等です(右開区間、10を含めることはできません)。

ステップパラメータが正の数の場合、start_numはend_numよりも小さくなります。上記はこの状況の例です。

ステップパラメータが負の場合、start_numはend_numよりも大きくなります。たとえば、range(10、-5、-3)は[10、7、4、1、-2]と同等です(-5を含めることもできません)。

 stepが正であるがstart_numがend_numより小さいか、stepが負であるがstart_numがend_numより大きい場合、プログラムはエラーを報告しませんが、数列の走査の結果は空ですが、終了します。トラバーサルしてelse(Wordがある場合)またはforループの後のステートメントを実行します。

In [5]: for num in range(10, -5, 3):
            print(num)
        print("程序结束。")
Out[5]: 程序结束。

したがって、forループでのrange()関数の役割は、トラバースされたオブジェクトとして整数のリストを生成するのをより便利にすることです。これは、リストがコレクションとしてトラバースされる場合と同じです。他に必要な概念的なコンテンツはあまりありません。はじめに。

range()関数を使用すると、グラフィックを印刷するための以前のプログラムを次のように簡略化できます。

In [6]: for num in range(10):
            print(' ' * (9 - num), '* ' * num, ' ' * (9 - num), sep='')
Out[6]:         *         
               * *        
              * * *       
             * * * *      
            * * * * *     
           * * * * * *    
          * * * * * * *   
         * * * * * * * *  
        * * * * * * * * *

上記は、forループの概要です。この時点で、if、while、for、およびループ終了メソッドが中断して続行する場合、Pythonの制御フローステートメントをすべて導入しました。少なくとも判断、ループ、終了などの文の制御に関して、これらの記事の内容を完全に理解できれば、知識の予備に関してあなたとマスターの間に違いはありません。残りはあなたがどのように柔軟になることができるかです使用されるプログラムで。

次の記事では、これまでに学んだことの簡単な要約を作成し、より複雑なゲームプログラムを作成します。これは、if、while、forループとそのネストに適用されるだけでなく、ループの終了も含まれます。ランダム関数、文字列関数、その他の知識ポイントは、前のコンテンツを消化、理解、適用するのに役立つことを願っていますので、ご期待ください。

 

 


この記事を読んでくれてありがとう!ご不明な点がございましたら、メッセージを残してご相談ください^ _ ^

以下のQRコードをスキャンすることを歓迎します。「YesuoPython」公式アカウントをフォローするか、「Learning Python with You Hand in Hand」シリーズの他の記事を読むか、以下のリンクをクリックして直接アクセスしてください。

「手をつないでPythonを学ぶ」1-なぜPythonを学ぶのか?

「手をつないでPythonを学ぶ」2-Pythonのインストール

「手をつないでPythonを学ぶ」3-PyCharmのインストールと構成

「手をつないでPythonを学ぶ」4-HelloWorld!

「手をつないでPythonを学ぶ」5-JupyterNotebook

「手をつないでPythonを学ぶ」6文字の識別

「手をつないでPythonを学ぶ」7-文字列のインデックス

「手をつないでPythonを学ぶ」8弦スライシング

「手をつないでPythonを学ぶ」9弦操作

「手をつないでPythonを学ぶ」10文字列関数

「手をつないでPythonを学ぶ」11-文字列のフォーマットされた出力

「手をつないでPythonを学ぶ」12-数字

「手をつないでPythonを学ぶ」13-操作

「手をつないでPythonを学ぶ」14-インタラクティブな入力

「手をつないでPythonを学ぶ」15-判断の声明

「手をつないでPythonを学ぶ」16ループステートメント

「手をつないでPythonを学ぶ」17-ループの終わり

ファンの方へ:「Pythonも言った」パブリックアカウントをフォローし、「hand 18」と返信すると、この記事で使用されているサンプル文を無料でダウンロードできます。

Pythonについても話します-Python愛好家のための学習と共有の領域

 

おすすめ

転載: blog.csdn.net/mnpy2019/article/details/98851593