プログラミング入門I
2024.10.28
乱数

Back to index page



  1. 本日の作業内容

  2. 前回の解答用紙の使い方チェックについて
  3. 先週は解答用紙の使用法の確認作業を行ってもらいましたが,いくつかの不備が見られました.実際の提出ではちゃんと修正して下さい.

    実行時エラー

    実行させてエラーになるものは採点しません.必ず自分で動作を確認してから提出してください.

    b2449(エディタとシェルの区別がついていない)

    解答用紙の不使用・改ざん

    解答用紙は自分で勝手に変更しないでください.上部のハッシュ # でコメントアウトした部分と最後のハイフンラインは必須です.解答用紙を使用しなかったり,改ざんしたりすると採点の対象外となりますので,注意してください.

    b2422 b2461 b2464

    解答用紙のヘッダ部分の番号と名前の未修正

    解答用紙の上部のコメントアウトした部分にはデフォルトで適当な学生番号と名前が入っていますので,そこは必ず自分のものに直してから解答を始める習慣をつけてください.こちらも減点対象です.

    b2425 b2457

    実行時の学生番号間違い

    実行時に学生番号が s246099 のままの人がいました.授業のときに話しましたが,そこは当然自分の学生番号に変えておいてください.

    b2404 b2412 b2419 b2425 b2437 b2439 b2440 b2447

    不要な情報の追加

    実行時に画面に学生番号を出力するように解答用紙は作っていますが,自分の名前は出力する必要はありません.ソースコードの中で日本語を使うと見えない空白文字が混在する危険もありますので,名前は要りません.

    b2414 b2417 b2418 b2430 b2432 b2433 b2438 b2444 b2448 b2451 b2453 b2455 b2457 b2459 c01 c02

  4. 前回の宿題について

    今回は初めての課題の提出でしたので,まだ慣れていないための不備や,うっかりミスなどが出ていたようです.次回以降は気をつけましょう.

    再履修クラスの遅れの関係で本来であれば別に解答例をお示しするのですが,今回はこのページで紹介します.私の考えた解答例は以下のようなものです.いずれも教科書 p.12 以降に記述されているものです.

    # #############################
    #
    # プログラミング入門II 宿題 2024.10.21
    # 学生番号:  s246099
    # 氏名:     松江 花子
    #
    # #############################
    
    import random
    
    print('Student number: s246099')
    print('')
    
    print("'hoge' is a string.")
    print("'\\n' denotes 'newline'.")
    
    
    print('\n------------------------\n')
    
    # #############################
    #
    # プログラミング入門II 宿題 2024.10.21
    # 学生番号:  s246099
    # 氏名:     松江 花子
    #
    # #############################
    
    import random
    
    print('Student number: s246099')
    print('')
    
    print('\'hoge\' is a string.')
    print('\'\\n\' denotes \'newline\'.')
    
    
    print('\n------------------------\n')
    
    引用記号の使い分けバックスラッシュによるエスケープ

    では,皆さんの提出についてみてみます.まずは,形式的な不備が見られました.減点や採点の対象外となりますので,次回以降は注意してください.

    実行時エラー: b2425 (引用符の区別なし) b2426 (全角文字混入)

    初めてなので,今回だけはエラーについて一応解説しておきます.まず,最初の方ですが,IDLEのエディタ上で以下のように色分けして表示されたはずです.

    print('Student number: s246025\n'hoge'is a string.\n\n denotes newline.')
    

    文字列は引用符の ' を含めてエディタ上では緑色で表示されます.ところが,print 文の中で途中文字が黒色になっています.これは,その部分が文字列ではないことを教えてくれているので,おかしいことが分かります.

    2番目の方は実行するとエラーなり,エディタ上で下図のようにオレンジのカーソルでエラー位置を教えてくれます.そこに日本語文字コードのスペースが入っているのですが,通常は見えません.ただ,おかしい場所を教えてくれているのだから,ちゃんとそこは対応してください.

    他には,ちょくちょく出てくる解答用紙を使用しないものが1件ありました.0点になりますので,以後は注意してください.

    解答用紙不使用: b2421

    解答用紙の学生番号間違い: b2455

    出力時番号間違い: b2408 b2455

    以下は問題のあるプログラムの例です.参考にしてください.

    print('Student number: s246001')
    print('')
    
    print("Student number: s246001")
    

    学生番号を2回出力しています.余分な作業です.

    print('Student number: s246005')
    print('\'hoge\' is a string.\n\'\\n\' denotes \'newline\'.')
    

    上のようなものが結構な数ありました.元の解答用紙では,学生番号の出力の後に改行をするための,print('') が入っていました.それを消さないで下さい.

    print("# #############################")
    print("#")
    print("# プログラミング入門Ⅰ 宿題 2024,10,21")
    print("# 学生番号: s2460**")
    print("# 氏名: 〇〇 〇〇")
    print("#")
    print("###############################")
    
    import random
    print()
    print('Student number: s2460**')
    print()
    print("'hoge' is a string.")
    print("\'\\n' denotes 'newline'.")
    

    解答用紙を勝手に改造しないでください.せっかくコメントアウトしているのですから,そのままでお願いします.

    import random
    
    print('〇〇〇〇: s2460**')
    print('')
    print('\'hoge\' is a strong.')
    print("\'¥n' denotes \'newline\'.")
    
    print('\n------------------------\n')
    

    出力の部分には氏名は要りません.これも解答用紙を勝手に改ざんしないでください.

    import random
    
    print('Student number: s2460**')
    print('〇〇 〇〇')
    
    
    
    
    print('\n------------------------\n')
    

    前回の解答用紙チェックと間違えたのか,今回の課題ではない上のようなものがいくつか出てきました.

    print("\n'hoge'is a string.\n'\\n'denotes'newline'.")
    

    この授業では出力結果の部分に簡単な英語や英文を使用することにしています.英語のような欧米の言語は分かち書きの言語なので,スペースが単語の区切りを示します.そのため,スペースは重要です.上のれいでは文字列 'hoge' の後にスペースがありません.こういうことも減点の対象になります.

  5. 前回の復習

    print() を使用して画面に文字列を表示する練習をしました.また,f 文字列(format メソッド)についても学習しました.今回も使用しますので,演習問題を通して理解を深めてください.

  6. 乱数

    乱数はこの授業ではほぼ毎回使用する非常に重要な機能です.教科書 p.98(旧版では p.96)では2種類の乱数を発生させる関数が紹介してありますので,違いを理解してどちらを使用するか間違えないようにしましょう.

    1. モジュールのインポート

      乱数を発生させる関数を読み込むためにはモジュールの読み込みが必要です.今回は,教科書 p.98 にあるモジュールの random を読み込みます.読み込むメソッドは import です.

    2. randint()

      整数の乱数を発生させる際には,教科書 p.98 にある randint() を使用します.次のプログラムは3桁と1から20までの乱数を発生させるプログラムです.

      import random
      
      num1 = random.randint(100, 999)
      num2 = random.randint(1, 20)
      
      print('Random number with 3 digits: {}'.format(num1))
      print('Random number between 1 and 20: {}'.format(num2))
      

      Random number with 3 digits: 473
      Random number between 1 and 20: 16
      

    3. random()

      関数の random() は0から1の間の小数を発生させる関数です.

      import random
      
      num = random.random()
      
      print('Random number between 0 and 1: {}'.format(num))
      

      Random number between 0 and 1: 0.7772063796213998
      

    4. ファイル名の注意

      乱数を使用する時にモジュールの random を読み込みます.そこで,注意が必要なのですが,もし自分が作ったプログラムを random.py として保存してしまうと,モジュールとしてその自分のプログラムを読み込むことになるので,当然エラーとなります.ということで,モジュールと同じ名前のファイル名は決してつけないでください.

    5. その他の乱数発生関数
    6. 実は Python には他にもたくさんの乱数を発生する関数があります.便利そうなものを2つほど紹介しておきます.

      • randrange()
      • この関数は以下のように引数を用意します.

        random.randrange(start, stop, setp)
        

        start 以上で stop 以下の整数の中から乱数をつくりますが,start から step 分とびとびの値から乱数を選びます.なので,start が偶数で step が 2 だと,偶数の乱数を発生することになります.

      • gauss() と normalvariate()
      • 正規分布に従った乱数を発生させる関数です.詳細は説明しませんが,データ処理の例題データを作る際に活用できます.

  7. 演習

    今回の演習問題です.

  8. 本日のまとめ

  9. 宿題

    宿題が公開されるのは明日火曜日10:00の予定で,締切りは来週の月曜日11月6日の10:00です.レポート提出システムを使用します.

    Python は基本的に文字コードがUTF-8のソースしか読み込めませんので,文字コードにUTFを使っている回答用紙もリンクをクリックして表示させると,文字化けします.解答用紙を使用する時には,リンクを右クリックして,「名前を付けてリンク先を保存」を選んで,保存してから使用してください.
  10. 次回の予習範囲

    次回は教科書のp.45-88(旧版はp.45-85)の範囲を学習しますので,予習をしてきてください.


目次ページに戻る