拡張問題(5)

[ edit ]

*


概要

[ edit ]

  • 演習(5)

    拡張課題(5a)

    【関数定義】

    数当てゲーム
    (コンピュータが決めた0~99の間の
    整数をヒントから当てるゲーム)

    EP_02_005a_high_and_low.py

*


ヒント

[ edit ]

  • この課題のヒント
    • 基本的には,「Xが入力されるまで,入力を受け付けることを繰り返す」ことになります.
      • そのループに先立って,乱数で0~99の範囲で,正解となる整数を決めます.
      • ループの中では,利用者が入力した数値と,正解との大小比較をします.
        • 正解と入力した数値が等しければ,利用者の勝ちです.
        • 利用者があきらめて,Xを入力すれば,コンピュータの勝ちです.
        • さもなくば,入力した数値が,正解よりも大きい(high)か,小さい(low)かを判断してヒントを表示します.
          • いわゆる,ハイ&ローゲームです.
      • 普通は,あてずっぽうではなくて,二分探索で攻めてきますよね.
        • つまり...
          • 0~99の範囲なので,まずは,真ん中の50を入力してみます.
            • その結果で,候補を半分に,限ることができます.
              • 「大きすぎる」というヒントが得られたら,0~49の範囲に正解があるので,また,その真ん中である24か25くらいを入力してみましょうか.
              • 「小さすぎる」というヒントが得られたら,51~99の範囲に正解があるので,また,その真ん中である74か75くらいを入力してみましょうか.
            • これを繰り返していくと,効率よく候補の範囲を絞り込んでいけそうです
*


実行例

[ edit ]

  • 実行例(1) ... クリックすると拡大します

fig-01

*


プログラム例: 本質的な部分 (授業中に順次公開します)

[ edit ]

  • 解答は基本的に,下記 7 行です.

   1 def judge_high_and_low( x, correct_number ):
   2     if x == correct_number:
   3         return( "正解です" )
   4     elif x > correct_number:
   5         return( "大きすぎます" )
   6     else:
   7         return( "小さすぎます" )
  • でも,単純に,正解なら整数の0, 大きすぎるとき正の数,小さすぎるとき負の数を返すと考えれば,単純に引き算で表現できます.

   1 def judge_high_and_low( x, correct_number ):
   2     return( int( x - correct_number ))
*


高度な話題 (授業中,もしくは授業後に順次公開します)

[ edit ]

  • 高度な話題へのリンク: 授業の流れを阻害しないように別ページにします

    • (後日の回の授業内容にはなる可能性がありますが,この回の授業内容には含めません).
    • に関するものです.


プログラム例: 配布コード (授業中に順次公開します)

*

*

SoftEng: Python/Prog/Practice/Extended/02/EP_005a (last edited 2018-10-28 15:20:57 by TadashiIijima)