AProg/2018/ex06
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*応用プログラミング及び実習 2018年度 第6回 [#ex06]
//&color(#ff0000){工事中};
#contents
** 今日の notebook [#c5575be4]
は [[AProg/2018]] からたどってください.
Notebook の扱いが分からないというひとはこちら: [[AProg/20...
**課題A (self) 期限: 授業当日11:45 [#kadaiA]
今日の notebook を開いてそこに記されたことを読んで&実行し...
完了したらチェックを受けなさい(notebookを開いたままにし...
**課題B (self) 期限: 当日の授業終了まで [#kadaiB]
//[[06exB.ipynb>AProg:06exB.ipynb]] ([[06exB.html>AProg:0...
//上記リンク先の Jupyter Notebook を開いてその指示にした...
//完了したらチェックを受けなさい.
次のことを全てやりなさい.
***課題B-1 [#zf69916a]
授業の際に作ったファイル 06constants.txt を読み込むプログ...
以下を修正しましょう.
#pre{{
##### AProg2018 第6回課題B-1
# 空のディクショナリを作る
constants = {}
# ファイルを読み込んで,1列目をキー,2列目を値(浮動小数...
# キーの一覧を使ってループし,ディクショナリの内容を表示...
for k in constants.keys():
print(k) # キー値 k に対応した値を小数点以下2桁まで...
}}
***課題B-2 [#id5fa52c]
+ [[第3回課題C>AProg/2018/ex03#kadaiC]] のプログラム 03ex...
+ [[readscore.py>AProg:readscore.py]] をいつもの場所に保...
+ 06exB2.py を,readscore.py を利用するように改造しよう....
++ 06exB2.py から関数 readScore() の定義を削除
++ 06exB2.py で readscore.py に定義された方の関数 readSco...
+ 動作確認しましょう.
**課題C (TA) 期限: 次回2講時開始直後 [#kadaiC]
//&color(#ff0000){工事中};
''顔検出しよう''
+ [[facedetect.py>AProg:facedetect.py]] と [[06exC.py>APr...
+ 正面を向いた人の顔が写った画像を適当に探して,いつもの...
+ 06exC.py の「画像を読み込む」の部分にそのファイル名を指...
-- facedetect.py には,龍大計算機室環境じゃないと正しく動...
-- コンピュータが扱う画像の世界では,画像の左上が原点で,...
-- あまり大きい顔/小さい顔は検出できないかもしれません
+ 06exC.py を修正して,検出した顔に四角い枠をつけた画像を...
-- 枠線を描くには,OpenCV の cv2.rectangle() 関数を使うと...
http://lang.sist.chukyo-u.ac.jp/classes/OpenCV/py_tutoria...
-- 上記のページの説明だけではわかりにくければ,ぐぐりまし...
**課題D (TA) 期限: 次回12時 [#kadaiD]
//&color(#ff0000){工事中};
''県庁所在地クイズを作ろう''
+ [[06kencho.txt>AProg:06kencho.txt]] をいつもの場所に保...
+ このファイルを読み込んで,次のように「県庁所在地クイズ...
#pre{{
何問やる? 50 ★ 「50」はキーボードからの入力.1以上4...
何問やる? 0
何問やる? 5
1問目: 和歌山県の県庁所在地は? 和歌山市 ★ 「和歌山市」...
正解!
2問目: 熊本県の県庁所在地は? くまもん
ちゃうで
3問目: 長野県の県庁所在地は? 長野市
正解!
4問目: 秋田県の県庁所在地は? 秋田犬
ちゃうで
5問目: 岡山県の県庁所在地は? 岡山市
正解!
5問中3問正解やったで
}}
+ ディクショナリ使うのが素直な方針でしょう.いきなり全体...
- Step1: ファイルを読み込んでディクショナリに登録するだ...
- Step2: ディクショナリのキーを格納したリストを作る.
keyList = list(hoge.keys()) # この例では hoge がディク...
- Step3: とりあえず札幌からの順番のままで最初の5道県でク...
- Step4: キーのリストをランダムにならべかえる(randomモジ...
- Step5: 細かいところをちゃんとする.問題数決められるよう...
**課題E (TA) 期限: 次々回2講時12時 [#kadaiE]
//&color(#ff0000){工事中};
''三目並べ = oxゲーム = Tic-Tac-Toe を作ろう''
この課題はいつもより少し配点大きくします.
***Step1 [#u85846b7]
+ 次の内容のプログラム 06sammoku.py を作って実行しなさい.
#pre{{
### AProg2018-ex06 三目並べ = oxゲーム = Tic-Tac-Toe
# 盤面の状態を表すディクショナリ
mark = {0:" ", 1:"o", -1:"x"}
### リストのリストで表された盤面情報を o,x で表示する
#
def printBoard(board):
print(board) # 実行例のように縦横に o や x が並ぶよ...
# printBoard の動作確認
board = [[0, 1, -1], [1, 0, -1], [0, 0, 0]]
printBoard(board)
}}
+ printBoard() の出力が以下のようになるよう修正しなさい.~
&ref(http://www-tlab.math.ryukoku.ac.jp/~takataka/course/...
+ このプログラムに,次のような仕様の関数 isValid() の定義...
-- 関数名と引数は以下の通り .board は盤面を表すリストの...
isValid(board, x, y)
-- 位置 (x, y) が有効(盤面の範囲内かつまだoxがついてない...
***Step2 [#g4c90e7b]
+Step1 の成果と以下を組み合わせなさい.さらに,このままで...
#pre{{
### AProg2018-ex06 三目並べ = oxゲーム = Tic-Tac-Toe
# 盤面の状態を表すディクショナリ
mark = {0:" ", 1:"o", -1:"x"}
### リストのリストで表された盤面情報を o,x で表示する
#
def printBoard(board):
#中身は自分で.mark 使うこと
### 位置 (x, y) が有効(盤面の範囲内かつまだoxがついてな...
#
def isValid(board, x, y):
#中身は自分で
### 入力を受け付ける.有効な位置でなければ再入力してもらう
#
def procUserInput(board):
while True:
msg = "どこに置く? 「0 1」のようにスペース入れて...
s = input(msg).split()
if len(s) == 2:
y, x = int(s[0]), int(s[1])
if isValid(board, x, y):
return y, x
else:
print("そこには置けへんで.", end="")
print("入力し直して")
# 3 x 3 の盤面
board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
# o の番なら 1, x の番なら -1
turn = 1
while True:
printBoard(board)
if turn == 1:
print(" o の番ほげ.", end="")
else:
print(" x の番ほげ.", end="")
y, x = procUserInput(board)
turn *= -1
}}
+ 以下の関数 checkGameOver() を使って勝敗判定できるように...
#pre{{
### ゲーム終了かどうか判定.戻り値は次の通り.この関数は...
#
# -2: 引き分けでゲーム終了, -1: xの勝利
# 0: まだゲーム終了でない 1: oの勝利
#
def checkGameOver(board):
boardSize = len(board)
# 横一行 mark がそろっていたら mark を返す
for i in range(boardSize):
mark = board[i][0]
if mark == 0:
continue
j = 1
while j < boardSize and board[i][j] == mark:
j += 1
if j == boardSize:
return mark
# 縦一列 mark がそろっていたら mark を返す
for j in range(boardSize):
mark = board[0][j]
if mark == 0:
continue
i = 1
while i < boardSize and board[i][j] == mark:
i += 1
if i == boardSize:
return mark
# 右下がりに mark がそろっていたら mark を返す
mark = board[0][0]
if mark != 0:
i = 1
while i < boardSize and board[i][i] == mark:
i += 1
if i == boardSize:
return mark
# 右上がりに mark がそろっていたら mark を返す
mark = board[boardSize-1][0]
if mark != 0:
i = 1
while i < boardSize and board[boardSize-1-i][i] =...
i += 1
if i == boardSize:
return mark
# 盤面が埋まってたら引き分け
for i in range(boardSize):
for j in range(boardSize):
if board[i][j] == 0:
return 0
return -2
}}
***Step3 [#g4c90e7b]
コンピュータと対戦できるように改造しよう.先手番 o は常に...
***Step4 [#d28f0147]
ここまでのプログラムをうまく作っていたら,盤面を表すリス...
**課題S (omake) [#kadaiS]
//&color(#ff0000){工事中};
課題C のプログラムをもとにして,次のことをやりましょう.
+ 顔領域内の画素値を反転させた画像を作る
+ 顔検出の結果を利用して何か他におもしろいことをやるプロ...
終了行:
*応用プログラミング及び実習 2018年度 第6回 [#ex06]
//&color(#ff0000){工事中};
#contents
** 今日の notebook [#c5575be4]
は [[AProg/2018]] からたどってください.
Notebook の扱いが分からないというひとはこちら: [[AProg/20...
**課題A (self) 期限: 授業当日11:45 [#kadaiA]
今日の notebook を開いてそこに記されたことを読んで&実行し...
完了したらチェックを受けなさい(notebookを開いたままにし...
**課題B (self) 期限: 当日の授業終了まで [#kadaiB]
//[[06exB.ipynb>AProg:06exB.ipynb]] ([[06exB.html>AProg:0...
//上記リンク先の Jupyter Notebook を開いてその指示にした...
//完了したらチェックを受けなさい.
次のことを全てやりなさい.
***課題B-1 [#zf69916a]
授業の際に作ったファイル 06constants.txt を読み込むプログ...
以下を修正しましょう.
#pre{{
##### AProg2018 第6回課題B-1
# 空のディクショナリを作る
constants = {}
# ファイルを読み込んで,1列目をキー,2列目を値(浮動小数...
# キーの一覧を使ってループし,ディクショナリの内容を表示...
for k in constants.keys():
print(k) # キー値 k に対応した値を小数点以下2桁まで...
}}
***課題B-2 [#id5fa52c]
+ [[第3回課題C>AProg/2018/ex03#kadaiC]] のプログラム 03ex...
+ [[readscore.py>AProg:readscore.py]] をいつもの場所に保...
+ 06exB2.py を,readscore.py を利用するように改造しよう....
++ 06exB2.py から関数 readScore() の定義を削除
++ 06exB2.py で readscore.py に定義された方の関数 readSco...
+ 動作確認しましょう.
**課題C (TA) 期限: 次回2講時開始直後 [#kadaiC]
//&color(#ff0000){工事中};
''顔検出しよう''
+ [[facedetect.py>AProg:facedetect.py]] と [[06exC.py>APr...
+ 正面を向いた人の顔が写った画像を適当に探して,いつもの...
+ 06exC.py の「画像を読み込む」の部分にそのファイル名を指...
-- facedetect.py には,龍大計算機室環境じゃないと正しく動...
-- コンピュータが扱う画像の世界では,画像の左上が原点で,...
-- あまり大きい顔/小さい顔は検出できないかもしれません
+ 06exC.py を修正して,検出した顔に四角い枠をつけた画像を...
-- 枠線を描くには,OpenCV の cv2.rectangle() 関数を使うと...
http://lang.sist.chukyo-u.ac.jp/classes/OpenCV/py_tutoria...
-- 上記のページの説明だけではわかりにくければ,ぐぐりまし...
**課題D (TA) 期限: 次回12時 [#kadaiD]
//&color(#ff0000){工事中};
''県庁所在地クイズを作ろう''
+ [[06kencho.txt>AProg:06kencho.txt]] をいつもの場所に保...
+ このファイルを読み込んで,次のように「県庁所在地クイズ...
#pre{{
何問やる? 50 ★ 「50」はキーボードからの入力.1以上4...
何問やる? 0
何問やる? 5
1問目: 和歌山県の県庁所在地は? 和歌山市 ★ 「和歌山市」...
正解!
2問目: 熊本県の県庁所在地は? くまもん
ちゃうで
3問目: 長野県の県庁所在地は? 長野市
正解!
4問目: 秋田県の県庁所在地は? 秋田犬
ちゃうで
5問目: 岡山県の県庁所在地は? 岡山市
正解!
5問中3問正解やったで
}}
+ ディクショナリ使うのが素直な方針でしょう.いきなり全体...
- Step1: ファイルを読み込んでディクショナリに登録するだ...
- Step2: ディクショナリのキーを格納したリストを作る.
keyList = list(hoge.keys()) # この例では hoge がディク...
- Step3: とりあえず札幌からの順番のままで最初の5道県でク...
- Step4: キーのリストをランダムにならべかえる(randomモジ...
- Step5: 細かいところをちゃんとする.問題数決められるよう...
**課題E (TA) 期限: 次々回2講時12時 [#kadaiE]
//&color(#ff0000){工事中};
''三目並べ = oxゲーム = Tic-Tac-Toe を作ろう''
この課題はいつもより少し配点大きくします.
***Step1 [#u85846b7]
+ 次の内容のプログラム 06sammoku.py を作って実行しなさい.
#pre{{
### AProg2018-ex06 三目並べ = oxゲーム = Tic-Tac-Toe
# 盤面の状態を表すディクショナリ
mark = {0:" ", 1:"o", -1:"x"}
### リストのリストで表された盤面情報を o,x で表示する
#
def printBoard(board):
print(board) # 実行例のように縦横に o や x が並ぶよ...
# printBoard の動作確認
board = [[0, 1, -1], [1, 0, -1], [0, 0, 0]]
printBoard(board)
}}
+ printBoard() の出力が以下のようになるよう修正しなさい.~
&ref(http://www-tlab.math.ryukoku.ac.jp/~takataka/course/...
+ このプログラムに,次のような仕様の関数 isValid() の定義...
-- 関数名と引数は以下の通り .board は盤面を表すリストの...
isValid(board, x, y)
-- 位置 (x, y) が有効(盤面の範囲内かつまだoxがついてない...
***Step2 [#g4c90e7b]
+Step1 の成果と以下を組み合わせなさい.さらに,このままで...
#pre{{
### AProg2018-ex06 三目並べ = oxゲーム = Tic-Tac-Toe
# 盤面の状態を表すディクショナリ
mark = {0:" ", 1:"o", -1:"x"}
### リストのリストで表された盤面情報を o,x で表示する
#
def printBoard(board):
#中身は自分で.mark 使うこと
### 位置 (x, y) が有効(盤面の範囲内かつまだoxがついてな...
#
def isValid(board, x, y):
#中身は自分で
### 入力を受け付ける.有効な位置でなければ再入力してもらう
#
def procUserInput(board):
while True:
msg = "どこに置く? 「0 1」のようにスペース入れて...
s = input(msg).split()
if len(s) == 2:
y, x = int(s[0]), int(s[1])
if isValid(board, x, y):
return y, x
else:
print("そこには置けへんで.", end="")
print("入力し直して")
# 3 x 3 の盤面
board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
# o の番なら 1, x の番なら -1
turn = 1
while True:
printBoard(board)
if turn == 1:
print(" o の番ほげ.", end="")
else:
print(" x の番ほげ.", end="")
y, x = procUserInput(board)
turn *= -1
}}
+ 以下の関数 checkGameOver() を使って勝敗判定できるように...
#pre{{
### ゲーム終了かどうか判定.戻り値は次の通り.この関数は...
#
# -2: 引き分けでゲーム終了, -1: xの勝利
# 0: まだゲーム終了でない 1: oの勝利
#
def checkGameOver(board):
boardSize = len(board)
# 横一行 mark がそろっていたら mark を返す
for i in range(boardSize):
mark = board[i][0]
if mark == 0:
continue
j = 1
while j < boardSize and board[i][j] == mark:
j += 1
if j == boardSize:
return mark
# 縦一列 mark がそろっていたら mark を返す
for j in range(boardSize):
mark = board[0][j]
if mark == 0:
continue
i = 1
while i < boardSize and board[i][j] == mark:
i += 1
if i == boardSize:
return mark
# 右下がりに mark がそろっていたら mark を返す
mark = board[0][0]
if mark != 0:
i = 1
while i < boardSize and board[i][i] == mark:
i += 1
if i == boardSize:
return mark
# 右上がりに mark がそろっていたら mark を返す
mark = board[boardSize-1][0]
if mark != 0:
i = 1
while i < boardSize and board[boardSize-1-i][i] =...
i += 1
if i == boardSize:
return mark
# 盤面が埋まってたら引き分け
for i in range(boardSize):
for j in range(boardSize):
if board[i][j] == 0:
return 0
return -2
}}
***Step3 [#g4c90e7b]
コンピュータと対戦できるように改造しよう.先手番 o は常に...
***Step4 [#d28f0147]
ここまでのプログラムをうまく作っていたら,盤面を表すリス...
**課題S (omake) [#kadaiS]
//&color(#ff0000){工事中};
課題C のプログラムをもとにして,次のことをやりましょう.
+ 顔領域内の画素値を反転させた画像を作る
+ 顔検出の結果を利用して何か他におもしろいことをやるプロ...
ページ名: