Differences between revisions 1 and 3 (spanning 2 versions)
Revision 1 as of 2018-10-09 06:33:52
Size: 746
Comment:
Revision 3 as of 2018-10-10 15:23:28
Size: 5676
Comment:
Deletions are marked like this. Additions are marked like this.
Line 10: Line 10:
==== 拡張問題() ==== ==== 拡張問題(3) ====
Line 12: Line 12:
 ||演習() ||<-2>       ||
 ||演習(a) ||
[[../EP_00a||target="_blank"]]||    ||
 ||<|2>演習(3)||<|2>拡張課題(3a)||<|2>【関数定義】||[じゃんけんの勝敗]を判定する関数||
 ||<|1
> [[../EP_003a|EP_02_003a_janken_judge.py|target="_blank"]]||
Line 15: Line 15:
 * 解答は基本的に,下記 行です.
  * 問題の回答としては,これだけで十分です.
  * 自分自身のソフトウェア開発のためには,できるだけコメントをつける習慣をもってください.

 * 解答は,(手を文字列で書いて)素直に書くと,下記の関数ですが,ちょっと長くなってしまいましたね.
Line 20: Line 19:
def janken_judge_str( hand1, hand2 ):
    if hand1 == hand2:
        return( "あいこ" )
    elif hand1 == "グー":
        if hand2 == "チョキ":
            return( "勝ち" )
        else:
            return( "負け" )
    elif hand1 == "チョキ":
        if hand2 == "パー":
            return( "勝ち" )
        else:
            return( "負け" )
    else:
        if hand2 == "グー":
            return( "勝ち" )
        else:
            return( "負け" )
Line 23: Line 39:
 *  * 手を0,1,2で表現すると,わずか1行(読みやすく関数定義すれば2行)で勝敗が判定できます
  * あいこ,勝ち,負けを0,1,2で表現します
Line 26: Line 43:
def janken_judge( x, y ):
    return( ((y-x)+3)%3 )
}}}
Line 27: Line 47:
 ||X||Y|| ||Y-X||(Y-X)+3||(Y-X)+3)%3||
 ||<-2>||<-2> || ||<-3>||
 ||0||0||グー ||グー ||あいこ || 0 ||3 ||0||
 ||0||1||グー ||チョキ||勝ち || 1 ||4 ||1||
 ||0||2||グー ||パー ||負け || 2 ||5 ||2||
 ||<-2>||<-2> || ||<-3>||
 ||1||1||チョキ||チョキ||あいこ || 0 ||3 ||0||
 ||1||0||チョキ||グー ||負け ||-1 ||2 ||2||
 ||1||2||チョキ||パー ||勝ち || 1 ||4 ||1||
 ||<-2>||<-2> || ||<-3>||
 ||2||2||パー ||パー ||あいこ || 0 ||3 ||0||
 ||2||0||パー ||グー ||勝ち ||-2 ||1 ||1||
 ||2||1||パー ||チョキ||負け ||-1 ||2 ||2||

{{{#!highlight python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ==============================================================================
# * Copyright (c) 2018 IIJIMA, Tadashi
# * (IIJIMA Laboratory, Dept. of Science and Technology, Keio University).
# ==============================================================================
# ソフトウェア工学[02] 拡張課題[02]-(000a) EP_02_000a_.py
# EP(Extended Problem) 02-000a:
# 2018-10-03 飯島 正 (iijima@ae.keio.ac.jp)
# ==============================================================================
# ===== 【関数定義】 「じゃんけんの勝敗」を文字列で返す関数 =====
def janken_judge_str( hand1, hand2 ):
    if hand1 == hand2:
        return( "あいこ" )
    elif hand1 == "グー":
        if hand2 == "チョキ":
            return( "勝ち" )
        else:
            return( "負け" )
    elif hand1 == "チョキ":
        if hand2 == "パー":
            return( "勝ち" )
        else:
            return( "負け" )
    else:
        if hand2 == "グー":
            return( "勝ち" )
        else:
            return( "負け" )
# ==============================================================================
# ===== 【関数定義】 「じゃんけんの勝敗」を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
# ------------------------------------------------------------------------------
def janken_judge( x, y ):
    return( ((y-x)+3)%3 )
# ==============================================================================
# ===== 【関数定義】 「じゃんけんの勝敗」の文字列を,対応する整数0,1,2から返す関数 =====
# リスト(配列)もしくは辞書を使うともっと簡潔にできる → 後日
def judge_str( x ):
    if x == 0:
        return( "あいこ" )
    elif x == 1:
        return( "勝ち" )
    else:
        return( "負け" )
# ==============================================================================
# ===== 【メイン・プログラム】  =====
# ----- オープニングメッセージ -----
print( "「じゃんけんの勝敗」を判定する: " )
  
# ----- 計算と結果の表示 ----
print()
print( "グー ×グー : ", judge_str( janken_judge( 0, 0 ) ) )
print( "グー ×チョキ: ", judge_str( janken_judge( 0, 1 ) ) )
print( "グー ×パー : ", judge_str( janken_judge( 0, 2 ) ) )

print()
print( "チョキ×グー : ", judge_str( janken_judge( 1, 0 ) ) )
print( "チョキ×チョキ: ", judge_str( janken_judge( 1, 1 ) ) )
print( "チョキ×パー : ", judge_str( janken_judge( 1, 2 ) ) )

print()
print( "パー ×グー : ", judge_str( janken_judge( 2, 0 ) ) )
print( "パー ×チョキ: ", judge_str( janken_judge( 2, 1 ) ) )
print( "パー ×パー : ", judge_str( janken_judge( 2, 2 ) ) )
# ==============================================================================

拡張問題(3)

  • 演習(3)

    拡張課題(3a)

    【関数定義】

    [じゃんけんの勝敗]を判定する関数

    EP_02_003a_janken_judge.py

  • 解答は,(手を文字列で書いて)素直に書くと,下記の関数ですが,ちょっと長くなってしまいましたね.

   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で表現します

   1 def janken_judge( x, y ):
   2     return( ((y-x)+3)%3 )
  • 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 # ==============================================================================


SoftEng: Python/Prog/Practice/Extended/02/EP_003a (last edited 2018-10-28 15:20:47 by TadashiIijima)