戻る

出力サンプル ーじゃんけんプログラム(要件定義にミスがある)ー

要件定義 「あいこの場合は、決着がつくまで継続する」 を 機能要件に入れ忘れてしまった

【要件定義】 機能要件: ・ユーザーは「グー」、「パー」、または「チョキ」のいずれかを選択できる。 ・コンピューターはランダムに「グー」、「パー」、または「チョキ」のいずれかを選択する。 ・プログラムはユーザーとコンピューターの選択を比較し、勝者を決定する。 ・勝ち、負け、の際にそれぞれ結果を表示する 非機能要件: ・シンプルで直感的なインターフェース。 ・高速な応答時間。 ・再プレイ可能性。 制約: ・クラスや関数を使用しない。 優先順位付け: ・正確な勝敗判定が最優先。 ・ユーザーの選択の多様性(「グー」、「パー」、「チョキ」の全てが選択可能)。 ステークホルダー: エンドユーザー(ゲームプレイヤー)。 開発者(プログラムの作成とメンテナンスを担当)。

元のpythonソースコード

import random def get_user_choice(): return input("グー、チョキ、パーの中から選んでください: ") def get_computer_choice(choices): return random.choice(choices) def determine_winner(user_choice, computer_choice): if user_choice == computer_choice: return "draw" elif (user_choice == "グー" and computer_choice == "チョキ") or \ (user_choice == "チョキ" and computer_choice == "パー") or \ (user_choice == "パー" and computer_choice == "グー"): return "win" else: return "lose" def main(): choices = ["グー", "チョキ", "パー"] user_choice = get_user_choice() computer_choice = get_computer_choice(choices) print("コンピューターの選択: " + computer_choice) result = determine_winner(user_choice, computer_choice) if result == "draw": print("引き分けです。") elif result == "win": print("あなたの勝ちです!") else: print("あなたの負けです。") if __name__ == "__main__": main()

フローチャート図で表現したもの

ユーザー定義関数
def get_user_choice():
%%{init:{'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'black', 'primaryBorderColor':'#000000', 'lineColor':'gray', 'textColor':'#6A7FABCC', 'fontSize':'15px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% graph TD; classDef default fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:yellow,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:khaki,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:005060,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:springgreen,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:wheat,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:lightsteelblue,stroke:#333,stroke-width:2px; linkStyle default stroke:gray,stroke-width:2px; %%データ項目 1("処理 開始") 3[/" 【return文】 4: return input(゛グー、チョキ、パーの中から 選んでください: ゛) "/] 4("処理 終了") %%ルート設定 1-->3 3-->4
ユーザー定義関数
def get_computer_choice(choices):
%%{init:{'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'black', 'primaryBorderColor':'#000000', 'lineColor':'gray', 'textColor':'#6A7FABCC', 'fontSize':'15px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% graph TD; classDef default fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:yellow,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:khaki,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:005060,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:springgreen,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:wheat,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:lightsteelblue,stroke:#333,stroke-width:2px; linkStyle default stroke:gray,stroke-width:2px; %%データ項目 5("処理 開始") 7["【処理】 7: return random.choice(choice s) "] 8("処理 終了") %%ルート設定 5-->7 7-->8
ユーザー定義関数
def determine_winner(user_choice, computer_choice):
%%{init:{'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'black', 'primaryBorderColor':'#000000', 'lineColor':'gray', 'textColor':'#6A7FABCC', 'fontSize':'15px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% graph TD; classDef default fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:yellow,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:khaki,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:005060,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:springgreen,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:wheat,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:lightsteelblue,stroke:#333,stroke-width:2px; linkStyle default stroke:gray,stroke-width:2px; %%データ項目 9("処理 開始") 12{"10: 【条件文】"}:::clrPattern1 15[/" 【return文】 11: return ゛draw゛"/] 16{"12: 【条件文】"}:::clrPattern1 19[/" 【return文】 15: return ゛win゛"/] 21[/" 【return文】 17: return ゛lose゛"/] 22(("条件文 終了")) 23(("条件文 終了")) 24("処理 終了") %%ルート設定 9-->12 12-->|真(TRUE)|15 12-->|偽(FALSE)|16 15-->22 16-->|真(TRUE)|19 16-->|偽(FALSE)|21 19-->22 21-->22 22-->23 23-->24 style sg1 color:red,fill-opacity:0, stroke-opacity:0; subgraph sg1["if user_choice == computer_choice:"] 12 end style sg2 color:red,fill-opacity:0, stroke-opacity:0; subgraph sg2["elif (user_choice == ”グー” and computer_choice == ”チョキ”) or \"] 16 end
ユーザー定義関数
def main():
%%{init:{'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'black', 'primaryBorderColor':'#000000', 'lineColor':'gray', 'textColor':'#6A7FABCC', 'fontSize':'15px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% graph TD; classDef default fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:yellow,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:khaki,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:005060,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:springgreen,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:wheat,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:lightsteelblue,stroke:#333,stroke-width:2px; linkStyle default stroke:gray,stroke-width:2px; %%データ項目 25("処理 開始") 26["【処理】 20: choices = [゛グー゛, ゛チョキ゛, ゛パ ー゛] "] 28["【処理】 22: user_choice = get_user_cho ice() "] 30["【処理】 23: computer_choice = get_comp uter_choice(choices) "] 31["【出力】 24: print(゛コンピューターの選択: ゛ + com puter_choice) "]:::clrPattern5 33["【処理】 26: result = determine_winner( user_choice, computer_choice) "] 34{"28: 【条件文】"}:::clrPattern1 37["【出力】 29: print(゛引き分けです。゛)"]:::clrPattern5 38{"30: 【条件文】"}:::clrPattern1 41["【出力】 31: print(゛あなたの勝ちです!゛)"]:::clrPattern5 43["【出力】 33: print(゛あなたの負けです。゛)"]:::clrPattern5 44(("条件文 終了")) 45(("条件文 終了")) 46("処理 終了") %%ルート設定 25-->26 26-->28 28-->30 30-->31 31-->33 33-->34 34-->|真(TRUE)|37 34-->|偽(FALSE)|38 37-->44 38-->|真(TRUE)|41 38-->|偽(FALSE)|43 41-->44 43-->44 44-->45 45-->46 style sg1 color:red,fill-opacity:0, stroke-opacity:0; subgraph sg1["if result == ”draw”:"] 34 end style sg2 color:red,fill-opacity:0, stroke-opacity:0; subgraph sg2["elif result == ”win”:"] 38 end
関数ブロック以外
%%{init:{'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'black', 'primaryBorderColor':'#000000', 'lineColor':'gray', 'textColor':'#6A7FABCC', 'fontSize':'15px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% graph TD; classDef default fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:yellow,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:khaki,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:005060,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFFFDE,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:springgreen,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:wheat,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:lightsteelblue,stroke:#333,stroke-width:2px; linkStyle default stroke:gray,stroke-width:2px; %%データ項目 47{"35: 【条件文】"}:::clrPattern1 50["【処理】 36: main()"] 51(("条件文 終了")) %%ルート設定 s([START])--> 47-->|真(TRUE)|50 47-->|偽(FALSE)|51 50-->51 51--> e([end]) style sg1 color:red,fill-opacity:0, stroke-opacity:0; subgraph sg1["if __name__ == ”__main__”:"] 47 end