Pythonでサイコロを振る

目次
  • 解説
  • 1. サイコロの情報を設定・表示する
  • 2. サイコロを振る
問題に挑戦!
進捗を変更する




解説

1. サイコロの情報を設定・表示する


まずはPythonでサイコロを振るための準備をします。Colabの実行ファイルを作成し、サイコロの情報を設定してそれを画面に表示させてみましょう。

(1)Colab上で「step01.ipynb」を新規作成してください。
※よく分からない場合は「はじめに」を読み返してみましょう。
(2)下記のコードを最初のセルに入力して、
ランタイム」 > 「すべてのセルを実行」してください。
# 各サイコロの名前を定数に格納
DICE_A = 'サイコロA'
DICE_B = 'サイコロB'

# 各サイコロの最大値(面数)を変数に格納
diceA_max = 6
diceB_max = 6

# 各サイコロの情報を表示
print('{}の最大値は{}です'.format(DICE_A, diceA_max))
print('{}の最大値は{}です'.format(DICE_B, diceB_max))

実行して次の結果が出力されればOKです。

サイコロAの最大値は6です
サイコロBの最大値は6です

ポイント

#で始まる行

#で始まる行はコメント行と言い、エンジニアがプログラムに関する注意書きなどを記すための行で、プログラムの実行結果には影響しません

変数と代入

変数とは、プログラム内で使用する値の入れ物のことです。変数に文字列や数値などの値を入れることを代入といいます。その名の通り、変数には計算途中の値などを何度でも再代入することが可能です。

変数の名前はすべて小文字で単語の区切りをアンダーバーにするスネークケースを用いることが一般的です。(diceAのように固有名詞として大文字を含めても問題はありません。)

文字列と数値

文字列とは文字の塊のことで、「 ' 」または「 " 」(シングルクォーテーション/ダブルクォーテーション)で括る必要があります。

クォーテーションで括られていれば、'123' も文字列ですし、'' も文字列(長さ0の文字列、空文字とも言います)です。

数値の場合にはクォーテーションで括る必要はありません。

定数

定数とは、再代入できない変数のことです。しかし、Pythonには定数のための仕組みがありません

他の言語での定数の表記として多く用いられている、すべて大文字のスネークケースにすることで擬似的に定数とする(他のエンジニアへ再代入しないようにアピールする)ことが一般的です。

print()

print()を使用すると、丸括弧の中に置いた文字列が表示エリアに出力されます。

なお、Colabでは各セル最終行の実行結果が自動的に表示エリアに出力されます。(試しに最終行の行頭にある「print(」と行末にある「)」を削除してみてください。)

format()

format()を使用すると、丸括弧内の変数で、ピリオドで繋がれた文字列内の波括弧({})のペアを順番に置換します。また、その際には文字列への変換が行われます。

なお、format関数を使用しなくても、文字列どうしならば「'あい' + 'うえお'」のように「+」記号で結合でき、数値ならば「str(100) + '円'」のようにして文字列に変換すれば結合できます。

関数

関数とは、呼び出すと何らかの結果を返す処理の塊です。

print関数では丸括弧の中に置いた文字列が表示エリアに出力されましたね。丸括弧の中に置く値=関数の入力のことを引数(ひきすう)と言います。

format関数では文字列の波括弧を引数で置換し、その結果がさらにprint関数の入力になりましたね。このformat関数が返した値関数の出力のことを戻り値(もどりち)と言います。

なお、引数戻り値無い場合もあります。

2. サイコロを振る


それでは実際にサイコロを振ってみます。

(1)乱数を発生させるためのモジュールrandom」を使うために
先頭にさらにセルを追加して、下記のimport文を入力しましょう。
# インポート
import random
(2)末尾に新しいセルを追加して下記のコードを入力し、
ランタイム」 > 「すべてのセルを実行」してください。
# サイコロを振る = 1から最大値までのランダムな数を抽出する
diceA_face = random.randint(1, diceA_max)
diceB_face = random.randint(1, diceB_max)
print('{}を振った結果は{}でした'.format(DICE_A, diceA_face))
print('{}を振った結果は{}でした'.format(DICE_B, diceB_face))

実行して次のような結果が出力されればOKです。

サイコロAを振った結果は6でした
サイコロBを振った結果は5でした

一度すべてのセルを実行し、importや変数定義を済ませた後は、最後のセルのみを繰り返し実行することが可能です。実行する度に1〜最大値の範囲で結果が変わることを確認しましょう。

サイコロAを振った結果は1でした
サイコロBを振った結果は4でした

ポイント

import文

import文とは、あらかじめ用意されたプログラム群=モジュールを読み込むための命令です。

random.randint()

randint関数では、引数で受け取った最小値〜最大値の間のランダムな数値を生成します。

この関数はrandomモジュールをインポートする必要がありますが、print関数やstr関数のように、インポートが不要な関数もあり、それらは組み込み関数と呼ばれます。

問題

確認問題


確認問題1

この中で「サイコロ2つで500円です」が正しく出力されないものはどれか?
(Colabでセルを増やして実行してみて構いません)

確認問題2

この中で1から6までのランダムな数値正しく出力されるものはどれか?
(Colabでセルを増やして実行してみて構いません)

実践問題


問題

step01.ipynbの各セルに必要なコードを入力して、最大値が12であるサイコロCを追加してください。

実行結果例を表示
サイコロAの最大値は6です
サイコロBの最大値は6です
サイコロCの最大値は12です
サイコロAを振った結果は5でした
サイコロBを振った結果は2でした
サイコロCを振った結果は11でした

正解


正解プログラムコード全文を表示
# インポート
import random
# 各サイコロの名前を定数に格納
DICE_A = 'サイコロA'
DICE_B = 'サイコロB'
DICE_C = 'サイコロC'

# 各サイコロの最大値(面数)を変数に格納
diceA_max = 6
diceB_max = 6
diceC_max = 12

# 各サイコロの情報を表示
print('{}の最大値は{}です'.format(DICE_A, diceA_max))
print('{}の最大値は{}です'.format(DICE_B, diceB_max))
print('{}の最大値は{}です'.format(DICE_C, diceC_max))
# サイコロを振る = 1から最大値までのランダムな数を抽出する
diceA_face = random.randint(1, diceA_max)
diceB_face = random.randint(1, diceB_max)
diceC_face = random.randint(1, diceC_max)
print('{}を振った結果は{}でした'.format(DICE_A, diceA_face))
print('{}を振った結果は{}でした'.format(DICE_B, diceB_face))
print('{}を振った結果は{}でした'.format(DICE_C, diceC_face))