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

前回の記事「手をつないでPythonを学ぶ」15-判断文ifで、ifステートメントのさまざまな構造と知識ポイントを学びました。同時に、ifステートメントと以前に学んだ知識を使用して、真の意味での最初のPythonプログラム、「じゃんけん」ゲームを作成しました。しかし、このゲームでは、まだ改善が必要な領域がたくさんあります。今日は、whileループステートメントを導入した後、このゲームを改善し続けます。

whileステートメントの構造はif ... else ...と非常に似ていますが、キーワードifがwhileに変更されている点が異なります。最も重要な違いは、ifステートメントでは、判定条件が真の場合、実行ステートメント1が1回だけ実行されることです。while文では、判定条件が真の場合、判定条件が偽になるまで実行文1をループ実行し、その後文2を実行します。文の構造は次のとおりです。

while 判断条件:
    执行语句1
else:
    执行语句2

自然言語に翻訳すると、次のように表現できます。

判定条件が真の場合は文1を実行してから判定条件を判定し、判定条件が真の場合は文1を再度実行し、以下同様に判定条件が偽になるまで文2を実行します。

フローチャートを使用して、ifステートメントのフローチャートとの違いが、実行ステートメント1から判定条件への矢印が追加されていることを示します。同時に、判定条件が偽の場合に限り、ステートメント2が実行され、whileステートメント全体も終了します。それ以外の場合、条件判定とステートメント1はループで実行されます。

上記の紹介からわかるように、whileはループステートメントですが、判断条件に基づいて命令も実行するため、ifステートメントと多くの類似点があります。

条件の判断に関しては、whileステートメントはifステートメントとまったく同じであり、どちらもブール結果を出力する操作に基づいており、最も一般的に使用されるのは比較操作です。

形式の要件に関しては、whileステートメントもifステートメントと同じです。キーワード(while、else)が配置されているステートメント行の最後に「:」があります。「:」の後の実行ステートメント次のレベルのステートメントを表すインデントする必要があります。

簡単な例を見て、whileステートメントの操作ルールを見てください。

In [1]: a = 1
        while a <= 5:
            print("a={},满足a <= 5的判断条件,继续循环运行。".format(a))
            a += 1   # 赋值运算
        else:
            print("a={},不满足a <= 5的判断条件,循环终止。".format(a))
Out[1]: a=1,满足a <= 5的判断条件,继续循环运行。
        a=2,满足a <= 5的判断条件,继续循环运行。
        a=3,满足a <= 5的判断条件,继续循环运行。
        a=4,满足a <= 5的判断条件,继续循环运行。
        a=5,满足a <= 5的判断条件,继续循环运行。
        a=6,不满足a <= 5的判断条件,循环终止。

whileステートメントに関しては、導入する必要のあるいくつかの知識ポイントがあります。

1.共通の構造

上記の構造はwhile ... else ...構造ですが、最も一般的に使用されるwhile構造は、else部分を省略し、while部分のみを保持することです。このときの文の構造は次のようになります。

while 判断条件:
    执行语句

判定条件が真である限り、判定条件が偽になるまで文をループで実行し、ループを終了して終了します。

whileステートメントのこの一般的な構造は、プログラムをループで実行する際に主要な役割を果たします。これについて、前回の記事で書いたゲームプログラムについて考えましたか?ゲームをループで実行したい場合は、これをwhileステートメントで使用してください。

プログラムはループで実行され、判定条件が真の場合は終了できないため、whileステートメントを使用するときに「count」変数を設計します。合計数と各ループ後の変数の再割り当てにより、実行の合計数の制御が実現され、プログラムの無限ループが回避されます。

In [2]: a = 5   # 运行的总次数
        while a >= 1:
            print("Hello World!")
            a -= 1   # 改变判断条件中变量的值,避免无限循环
Out[2]: Hello World!
        Hello World!
        Hello World!
        Hello World!
        Hello World!

2.無限ループ

無限ループは無限ループとも呼ばれ、プログラミングの過程で判断条件が常に意図的または意図せずに真になるように設定されている場合に生成されます。

たとえば、上記の例では、判断条件が誤って<= 5と記述された場合、プログラムは無限に実行されます(aは常に5以下であるため)。無限ループを終了する方法は、実行中のプログラムで「■」をクリックすることです(Jupyter Notebookはメニューバーにあり、PyCharmはコンソールにあります)。

In [3]: a = 5
        while a <= 5:
            print("Hello World!")
            a -= 1
Out[3]: Hello World!
        Hello World!
        Hello World!
        Hello World!
        Hello World!
        ...

もちろん、無限ループは役に立たないわけではありません。たとえば、一部のサーバープログラムでは、ユーザーが継続的に使用できるように、プログラムを無限ループとして設計する必要があります。プログラムのエラーまたは更新がない限り、プログラムを終了する必要はありません。

無限ループを実現するのは非常に簡単です。上記の例では、「count」変数を設定する必要はありません。判断条件を1 == 1と書くだけです。試してみることができます。

3.ステートメントのネスト

whileステートメントのネストに関しては、ネストされたwhileステートメントが実行ステートメント自体と見なされる限り、複雑であると見なす必要はありません。

ただし、それでも、whileステートメントをネストすることはお勧めしません。単一レベルのwhileステートメントは簡単に無限ループを形成できるため、複数のwhileステートメントがネストされている場合、特に変数が非常に複雑な場合は、無限ループを形成しやすく、理由を見つけるのが困難です。

したがって、whileステートメントが特定の条件に従ってプログラムを繰り返す役割を果たすようにします。

上記はwhileステートメントの概要です。では、今日学んだ知識を使用して、「じゃんけん」プログラムを改善しましょう。

以前に保存したファイルを右クリックし、[コピー]、[貼り付け]の順にクリックしてファイルをすばやくコピーし、ポップアップの名前変更ウィンドウから新しいバージョンのゲームプログラムの名前を変更できます。

 

バージョン2.0では、ゲームのループ機能を強化し、指定した回数だけゲームを継続して実行できるようにします。

In [4]: import random   # 因为要使用随机函数,需要先导入随机函数库
 
        # 设置游戏的总次数,也可以使用input()函数通过输入的方法实现
        times = 5
        
        # 只使用while可以重复运行程序的功能
        while times >= 1:
        
            # 总次数、判断条件和重新赋值的公式,共同实现了对游戏总次数的控制,缺一不可
            times -= 1
            
            # 交互式输入过程,使用input()函数
            user = input("请输入您要出的拳(石头、剪刀、布):")
            
            # 使用choice()函数,实现在序列中随机选取一个元素,做为电脑出的拳
            computer = random.choice(['石头', '剪刀', '布'])
            
            # 以下是程序处理过程,直接按照游戏规则进行判断,根据判断结果进行输出
            
            # 把所有游戏者赢的情况列举出来,任何一种情况出现,就输出游戏者胜利
            if (user == '石头' and computer == '剪刀') or (user == '剪刀' and computer == '布')\
                    or (user == '布' and computer == '石头'):
                print("您出的是:{},电脑出的是:{}。恭喜,您赢了!".format(user, computer))
                
            # 打平的情况最容易描述,所以作为一个判断条件
            elif user == computer:
                print("您出的是:{},电脑出的是:{}。打平了!".format(user, computer))
                
            # 其它情况就是游戏者输的情况,因为描述比较复杂,放在其它情况里,就不用写很复杂的判断条件了
            else:
                print("您出的是:{},电脑出的是:{}。很遗憾,您输了!".format(user, computer))
                
        # 游戏结束的提示
        print("游戏结束,如果还想继续,请重新运行程序。")
        
Out[4]: 请输入您要出的拳(石头、剪刀、布):石头
        您出的是:石头,电脑出的是:布。很遗憾,您输了!
        
Out[5]: 请输入您要出的拳(石头、剪刀、布):剪刀
        您出的是:剪刀,电脑出的是:剪刀。打平了!
        
Out[6]: 请输入您要出的拳(石头、剪刀、布):布
        您出的是:布,电脑出的是:石头。恭喜,您赢了!
        
Out[7]: 请输入您要出的拳(石头、剪刀、布):石头
        您出的是:石头,电脑出的是:石头。打平了!
        
Out[8]: 请输入您要出的拳(石头、剪刀、布):剪刀
        您出的是:剪刀,电脑出的是:剪刀。打平了!
        游戏结束,如果还想继续,请重新运行程序。

最後に、PyCharmのスクリーンショットをお見せします。これは、プログラムが今後ますます長くなるため、毎回スクリーンショットを撮るとは限らないためです。プログラムのコードを読んだり、パブリックアカウントをフォローしてキーワードに返信したり、記事内の関連ファイルやコードを無料でダウンロードしたりできます。

 

上記はwhileステートメントの紹介です。whileはゲームのループ操作を実現するのに役立ちますが、日常のプログラミングではお勧めしません。1つは、注意しないと無限ループが表示されること、もう1つはほとんどの場合です。 whileステートメント。この関数は、後で紹介する別のループステートメントを使用して実現することもできます。

次の記事では、非常に重要なループステートメントの制御方法であるループの終了について学習します。このメソッドを適用することにより、ループステートメントはより強力な機能を実現できるので、ご期待ください。

 

 


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

以下の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も言った」パブリックアカウントをフォローし、「hand 16」に返信すると、この記事で使用されているサンプル文を無料でダウンロードできます。

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

 

おすすめ

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