第5章: プログラムロジックの構築
以前の記事を参照してください:
第 1 章: 初期の Python
第 2 章: 言語要素
第 3 章: ブランチ構造
第 4 章: ループ構造または、 「Python チュートリアル」
列に移動して表示します。
リソースディレクトリ: コード (5)
記事リソースのダウンロード: (1-15 章)
リンク: https://pan.baidu.com/s/1Mh1knjT4Wwt__7A9eqHmng?pwd=t2j3
抽出コード: t2j3
記事ディレクトリ
これまでの章を学習した後は、これまでに学習した知識を定着させるために、ここでいくつかの演習を行う必要があると思います。これまで学習した内容は Python の氷山の一角にすぎませんが、これらの内容は十分に理解できます。プログラムを構築するためのロジック。プログラミング言語の初心者にとって、Python の中心的な言語要素 (変数、型、演算子、式、分岐構造、ループ構造など) を学習した後、しなければならないことの 1 つは、学習した知識を使用して実際の問題を解決することです。言い換えれば、世界の問題とは、人間の自然言語で記述されたアルゴリズム (問題を解決するための方法や手順) を Python コードに翻訳する能力を発揮することであり、これは多くの練習を経てのみ達成できます。
この章では、いくつかの古典的なケースと演習を整理しました。これらの例を通じて、一方では、これまでに学習した Python の知識を強化するのに役立ち、他方では、Python について理解できるようになることを願っています。プログラム内のロジックを確立する方法といくつかの簡単なアルゴリズムを使用する方法、実際の問題を解決します。
古典的な例
-
水仙の番号を探してください。
説明: 水仙数は、超完全数不変数、ナルシスト数、自己力数、アームストロング数とも呼ばれ、3 桁の数であり、数の各桁の数の 3 乗の合計は次のようになります。それ自体とまったく同じです。例: 1 3 + 5 3 + 3 3 = 153 1^3 + 5^3+ 3^3=15313+53+33=153。
""" 找出所有水仙花数 """ for num in range(100, 1000): low = num % 10 mid = num // 10 % 10 high = num // 100 if num == low ** 3 + mid ** 3 + high ** 3: print(num)
上記のコードでは、整数の除算と剰余演算によって 3 桁の数の 1、10、100 を求めていますが、この小さなトリックは今でも実際の開発でよく使用されています。同様の方法を使用して、正の整数を反転することもできます。たとえば、12345 を 54321 に変更します。コードは次のとおりです。
""" 正整数的反转 """ num = int(input('num = ')) reversed_num = 0 while num > 0: reversed_num = reversed_num * 10 + num % 10 num //= 10 print(reversed_num)
-
100ドルと100羽の鶏の問題。
説明: 百貨百鶏とは、中国の古代数学者、張秋堅が『素経』の中で提案した数学の問題です。鶏 1 羽は 5 の価値があり、鶏 1 羽は 3 の価値があり、鶏 3 羽は 1 の価値があります。 。100 ドルで鶏を 100 羽買った場合、雄鶏、親鶏、ひよこはいくらですか? 現代語に訳すと、「雄鶏5元、雌鶏3元、ひよこ3羽1元」となりますが、100元で鶏を100羽買うとすると、雄鶏、雌鶏、ひよこは何羽になるでしょうか。
""" 《百钱百鸡》问题 """ for x in range(0, 20): for y in range(0, 33): z = 100 - x - y if 5 * x + 3 * y + z / 3 == 100: print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))
上記の方法は網羅的方法と呼ばれ、暴力的探索法とも呼ばれます。この方法は、代替解のすべての候補を 1 つずつ列挙し、各候補が問題の説明と一致するかどうかをチェックし、最終的に問題の解を導き出します。 。この方法は不器用に見えるかもしれませんが、非常に強力なコンピュータでは通常は実行可能、または良い選択であり、問題の解決策が存在する場合は、この方法で確実に見つけられます。
-
クラップスギャンブルゲーム。
説明: CRAPS (クラップスとも呼ばれる) は、米国ラスベガスで非常に人気のあるテーブル ギャンブル ゲームです。ゲームには 2 つのサイコロが使用され、プレイヤーは 2 つのサイコロを振ってゲームをプレイすることで得点を獲得します。簡単なルールは、プレイヤーが初めてサイコロを振って 7 点または 11 点が出た場合、プレイヤーの勝ち、プレイヤーが初めて 2 点、3 点、または 12 点を振った場合はディーラーの勝ち、その他の点を持ったプレイヤーは次のとおりです。ポイントはサイコロを振り続けます。プレイヤーが 7 ポイントをロールアウトした場合、ディーラーが勝ちます。プレイヤーが最初の数のポイントをロールアウトした場合、プレイヤーが勝ちます。他のポイントについては、プレイヤーは勝者が決定するまでサイコロを求め続けます。 。
""" Craps赌博游戏 我们设定玩家开始游戏时有1000元的赌注 游戏结束的条件是玩家输光所有的赌注 """ from random import randint money = 1000 while money > 0: print('你的总资产为:', money) needs_go_on = False while True: debt = int(input('请下注: ')) if 0 < debt <= money: break first = randint(1, 6) + randint(1, 6) print('玩家摇出了%d点' % first) if first == 7 or first == 11: print('玩家胜!') money += debt elif first == 2 or first == 3 or first == 12: print('庄家胜!') money -= debt else: needs_go_on = True while needs_go_on: needs_go_on = False current = randint(1, 6) + randint(1, 6) print('玩家摇出了%d点' % current) if current == 7: print('庄家胜') money -= debt elif current == first: print('玩家胜') money += debt else: needs_go_on = True print('你破产了, 游戏结束!')
### 役立つ演習
-
フィボナッチ数列の最初の 20 個の数値を生成します。
説明: 黄金分割数列とも呼ばれるフィボナッチ数列は、イタリアの数学者レオナルド・フィボナッチ (レオナルドダ・フィボナッチ) が『計算の本』の中で理想的な仮定の下でウサギを提案した成長率の問題によって導入された数列であるため、この数列は冗談めかして「ウサギシーケンス」とも呼ばれます。フィボナッチ数列の特徴は、数列の最初の 2 つの数値が両方とも 1 であり、3 番目の数値以降、各数値は前の 2 つの数値の合計になることです (1、1、2、3、5 など)。 8、13、21、34、55、89、144、…。フィボナッチ数列は、現代物理学、準結晶構造、化学、その他の分野に直接応用されています。
-
10000 までの完全な数を見つけます。
説明: 完全数は、完全数または完全数とも呼ばれ、そのすべての真の因数 (つまり、自分以外の因数) の和 (つまり、因数関数) が自分自身と全く同じになります。例: 6 ( 6 = 1 + 2 + 3 6=1+2+36=1+2+3 ) と 28 (28 = 1 + 2 + 4 + 7 + 14 28=1+2+4+7+1428=1+2+4+7+14 ) は完全数です。完全数には多くの魔法の性質があり、興味のある人はそれを自分で理解できます。
-
100 までのすべての素数を出力します。
説明: 素数とは、1 とそれ自体でのみ割り切れる正の整数 (1 を除く) を指します。
上記の演習の参考回答は、この章に対応するコード ディレクトリにありますので、必要な場合はご自身で参考回答を確認してください。