プログラミング入門I
2023.10.30
乱数
さて,今回は初めての課題の提出でしたが,早速いろいろな問題が発生したようです.不注意によるもの,誤解によるものなどいろいろな種類の間違いがありましたが,以下のコメントを参考に今後は不備の無いようにお願いします.こちらもむやみに原点はしたくないので,提出前にはしっかり注意しましょう. まずは解答用紙を使用していないものが出てきました.これは採点の対象外となりますので,以後ご注意ください. ありえない学生番号を画面に出力した人もいました.注意しましょう. 以下は問題のあるプログラムの例です.参考にしてください.
なお,今回は提出の予行演習用の解答用紙を使用した人がたくさんいました.Webページにも書いておいたのですが,あれはあくまでサンプルでしたので,それを使用するのは適切ではありません.もちろん,不要部分をすべて削除した上であれば問題はありませんが.
print('Student number: *******')
print('')
print('\n------------------------')
何も中身が無いものを出してきた人がいました.???
# The source shall be written in this space. # Do not delete any of the pre-written lines. print('This is a sample of the answer sheet') print('So, don\'t use this sheet for the real task') print('You can try to "run" this sheet and confirm the result') print('\n------------------------') |
「このシートは実際の課題では使わないでください」ってちゃんと書いていたのにね.
print('Student number: s236099') |
上のように学生番号を直していないのはまずいですよね.
print('Department of Electrical and Electronic Engineering') |
print('Department of Mechanical, Electronic Engineering') |
上の2つは学科名が違っています.うちの学科だけサービスでちゃんと見本を用意していたのになぜ?
print('Depratment of Mechaninical,Electrical and Electronic Engineering |
英語などの表音文字を使用するヨーロッパ系の言語では単語の分かち書きが重要です.単語の間にはスペースが入ることはこれまでに習っているはずです.で,カンマ , やピリオド . の後にも必ずスペースが入ります.日本語の句読点の「,」や「.」はスペース込のフォントですが,欧文は違いますので,注意しましょう.
print('*******HI , **') |
カンマの前にはスペースは入りません.
Department of Mechanical, Electrical and Electronic Engineering S23 |
わかりづらいですが,"Engineering" と "S23" など文字列中のスペースが全角スペース(日本語文字コード)になっています.環境によっては文字化けしますので,注意しましょう.
その他に気になったことは名前の部分の表記法です.基本的にヨーロッパの文化では名姓の順で表記することはご存じかと思います.明治以降の日本人がそれに合わせせてしまったために,今でも欧米の人で日本人の名前も名姓の順だと間違って思っている人がいます.そのため,政府は日本人の名前のアルファベット表記を姓名の順にすることを現時点では行うようになりました.なので,今回のサンプルでも名姓の順にしています.ただし,姓が先にあることをわかってもらうために,姓の方は全部大文字にする,姓の後にカンマを置くなど誤解されないような工夫もしばしば行われます.今回もそれに倣ってサンプルを作りました.ということで,一部の人は名姓の順なのに,名の方を大文字表記にしたり,カンマを入れたりしていて,間違った表記法を使用していました.こちらも注意しましょう.
最後のは謎です.これはなんなんでしょうね.間違ったファイルをアップロードしてしまったのでしょうか.
#(ⅰ) s1='ABC' s2='DEF' print(s1+s2) #(ⅱ) print(s1+s2+s1+s2+s1+s2+s1+s2+s1+s2) #(ⅲ) X=0b10 Y=0o10 Z=0x10 print(X,Y,Z) #(ⅳ) num1=123 num2=456 print(f'The sum of num1 and num2 equals to {num1+num2}.') print(f'The sum of {num1} and {num2} equals to {num1+num2}.') #(ⅴ) num3=num1+num2 print(f'The sum of num1 and num2 equals to {num3}.') print(f'The sum of {num1} and {num2} equals to {num3}.') #(ⅵ) print('{:>5}'.format(s1)) print('{:^5}'.format(s2)) #(ⅶ) y=12345 z=6789 print(y//z) print('{:.4}'.format(y/z)) print('{:.8}'.format(y/z)) #(ⅷ) x=0.01 print(x-x**3/(3*2*1)) #12桁まで一致 |
print() を使用して画面に文字列を表示する練習をしました.また,f 文字列(format メソッド)についても学習しました.今回も使用しますので,演習問題を通して理解を深めてください.
乱数はこの授業ではほぼ毎回使用する非常に重要な機能です.教科書 p.98(旧版では p.96)では2種類の乱数を発生させる関数が紹介してありますので,違いを理解してどちらを使用するか間違えないようにしましょう.
乱数を発生させる関数を読み込むためにはモジュールの読み込みが必要です.今回は,教科書 p.98(旧版では p.96)にあるモジュールの random を読み込みます.読み込むメソッドは import です.
整数の乱数を発生させる際には,教科書 p.98(旧版では p.96)にある 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 |
関数の 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 |
乱数を使用する時にモジュールの random を読み込みます.そこで,注意が必要なのですが,もし自分が作ったプログラムを random.py として保存してしまうと,モジュールとしてその自分のプログラムを読み込むことになるので,当然エラーとなります.ということで,モジュールと同じ名前のファイル名は決してつけないでください.
実は Python には他にもたくさんの乱数を発生する関数があります.便利そうなものを2つほど紹介しておきます.
この関数は以下のように引数を用意します.
random.randrange(start, stop, setp) |
start 以上で stop 以下の整数の中から乱数をつくりますが,start から step 分とびとびの値から乱数を選びます.なので,start が偶数で step が 2 だと,偶数の乱数を発生することになります.
正規分布に従った乱数を発生させる関数です.詳細は説明しませんが,データ処理の例題データを作る際に活用できます.
今回の演習問題です.
宿題が公開されるのは明日火曜日10:00の予定で,締切りは来週の月曜日11月6日の10:00です.レポート提出システムを使用します.
Python は基本的に文字コードがUTF-8のソースしか読み込めませんので,文字コードにUTFを使っている回答用紙もリンクをクリックして表示させると,文字化けします.解答用紙を使用する時には,リンクを右クリックして,「名前を付けてリンク先を保存」を選んで,保存してから使用してください.