Size: 5676
Comment:
|
Size: 5793
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 11: | Line 11: |
<<TableOfContents>> [[../EP_003a/Contents|*]] <<Include(../EP_003a/Contents)>> [[../EP_003a/Contents|*]] ---- |
拡張問題(3)
Contents
概要
*
ヒント
この課題で使うPythonの機能 (学習のヒント)
[ edit ]
- この課題で使うPythonの機能 (学習のヒント)
この課題の解き方 (問題解決のヒント)
[ edit ]
- この課題の解き方 (問題解決のヒント) ....
文字列で与えられた二つの「手」から,勝敗を返す関数janken_judge_str( hand1, hand2 )を定義することができます.
- 単純に,if-elif-else文で書けそうですね.
0,1,2で,じゃんけんの「手」を表現すると,簡単な計算で,勝敗を0(あいこ), 1(勝ち), 2(負け)で求める関数janken_judge(h1, h2)も定義できます.
- 更にヒント: 剰余系を使います.
実行例
*
プログラム例: 本質的な部分 (授業中に順次公開します)
高度な話題 (授業中,もしくは授業後に順次公開します)
[ edit ]
⇒ 高度な話題へのリンク: 授業の流れを阻害しないように別ページにします
- (後日の回の授業内容にはなる可能性がありますが,この回の授業内容には含めません).
- に関するものです.
プログラム例: 配布コード (授業中に順次公開します)
演習(3)
拡張課題(3a)
【関数定義】
[じゃんけんの勝敗]を判定する関数
- 解答は,(手を文字列で書いて)素直に書くと,下記の関数ですが,ちょっと長くなってしまいましたね.
1 def janken_judge_str( hand1, hand2 ):
2 if hand1 == hand2:
3 return( "あいこ" )
4 elif hand1 == "グー":
5 if hand2 == "チョキ":
6 return( "勝ち" )
7 else:
8 return( "負け" )
9 elif hand1 == "チョキ":
10 if hand2 == "パー":
11 return( "勝ち" )
12 else:
13 return( "負け" )
14 else:
15 if hand2 == "グー":
16 return( "勝ち" )
17 else:
18 return( "負け" )
- 手を0,1,2で表現すると,わずか1行(読みやすく関数定義すれば2行)で勝敗が判定できます
- あいこ,勝ち,負けを0,1,2で表現します
X
Y
Y-X
(Y-X)+3
(Y-X)+3)%3
0
0
グー
グー
あいこ
0
3
0
0
1
グー
チョキ
勝ち
1
4
1
0
2
グー
パー
負け
2
5
2
1
1
チョキ
チョキ
あいこ
0
3
0
1
0
チョキ
グー
負け
-1
2
2
1
2
チョキ
パー
勝ち
1
4
1
2
2
パー
パー
あいこ
0
3
0
2
0
パー
グー
勝ち
-2
1
1
2
1
パー
チョキ
負け
-1
2
2
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # ==============================================================================
4 # * Copyright (c) 2018 IIJIMA, Tadashi
5 # * (IIJIMA Laboratory, Dept. of Science and Technology, Keio University).
6 # ==============================================================================
7 # ソフトウェア工学[02] 拡張課題[02]-(000a) EP_02_000a_.py
8 # EP(Extended Problem) 02-000a:
9 # 2018-10-03 飯島 正 (iijima@ae.keio.ac.jp)
10 # ==============================================================================
11 # ===== 【関数定義】 「じゃんけんの勝敗」を文字列で返す関数 =====
12 def janken_judge_str( hand1, hand2 ):
13 if hand1 == hand2:
14 return( "あいこ" )
15 elif hand1 == "グー":
16 if hand2 == "チョキ":
17 return( "勝ち" )
18 else:
19 return( "負け" )
20 elif hand1 == "チョキ":
21 if hand2 == "パー":
22 return( "勝ち" )
23 else:
24 return( "負け" )
25 else:
26 if hand2 == "グー":
27 return( "勝ち" )
28 else:
29 return( "負け" )
30 # ==============================================================================
31 # ===== 【関数定義】 「じゃんけんの勝敗」を0,1,2の整数で返す関数 =====
32 # X Y Y-X (Y-X)+3 ((Y-X)+3)%3
33 # 0 0 グー グー あいこ 0 3 0
34 # 0 1 グー チョキ 勝ち 1 4 1
35 # 0 2 グー パー 負け 2 5 2
36 #
37 # 1 1 チョキ チョキ あいこ 0 3 0
38 # 1 0 チョキ グー 負け -1 2 2
39 # 1 2 チョキ パー 勝ち 1 4 1
40 #
41 # 2 2 パー パー あいこ 0 3 0
42 # 2 0 パー グー 勝ち -2 1 1
43 # 2 1 パー チョキ 負け -1 2 2
44 # ------------------------------------------------------------------------------
45 def janken_judge( x, y ):
46 return( ((y-x)+3)%3 )
47 # ==============================================================================
48 # ===== 【関数定義】 「じゃんけんの勝敗」の文字列を,対応する整数0,1,2から返す関数 =====
49 # リスト(配列)もしくは辞書を使うともっと簡潔にできる → 後日
50 def judge_str( x ):
51 if x == 0:
52 return( "あいこ" )
53 elif x == 1:
54 return( "勝ち" )
55 else:
56 return( "負け" )
57 # ==============================================================================
58 # ===== 【メイン・プログラム】 =====
59 # ----- オープニングメッセージ -----
60 print( "「じゃんけんの勝敗」を判定する: " )
61
62 # ----- 計算と結果の表示 ----
63 print()
64 print( "グー ×グー : ", judge_str( janken_judge( 0, 0 ) ) )
65 print( "グー ×チョキ: ", judge_str( janken_judge( 0, 1 ) ) )
66 print( "グー ×パー : ", judge_str( janken_judge( 0, 2 ) ) )
67
68 print()
69 print( "チョキ×グー : ", judge_str( janken_judge( 1, 0 ) ) )
70 print( "チョキ×チョキ: ", judge_str( janken_judge( 1, 1 ) ) )
71 print( "チョキ×パー : ", judge_str( janken_judge( 1, 2 ) ) )
72
73 print()
74 print( "パー ×グー : ", judge_str( janken_judge( 2, 0 ) ) )
75 print( "パー ×チョキ: ", judge_str( janken_judge( 2, 1 ) ) )
76 print( "パー ×パー : ", judge_str( janken_judge( 2, 2 ) ) )
77 # ==============================================================================