簡単なじゃんけんのプログラムを題材にしたフローチャート図です。
元のpythonソースコード
import random
hands = {0: "グー", 1: "チョキ", 2: "パー"}
decision = {0: "引き分け", 1: "負け", 2: "勝ち"}
draw = 0 # 0:引き分け, 1:負け, 2:勝ち, 3:0~2以外の数字の時
count = 0
while draw == 0 or draw == 3:
print("じゃんけん・・・")
try:
player = int(input("0=グー, 1=チョキ, 2=パー: "))
if 0 <= player <= 2:
com = random.randint(0, 2)
print("あなた:" + hands[player] + "\t" + "あいて:" + hands[com])
decision_value = (player - com + 3) % 3
print(decision[decision_value])
draw = decision_value
if draw == 0:
count += 1
if count == 5:
print("※引き分け数が5回なので終了します。")
break
else:
print("0~2の範囲で数字を入力してください")
except ValueError:
print("数値で入力してください")
本体験版より出力後の、自動生成されたマークダウンソースファイル(拡張ファイル形式「.md」)
###### 関数ブロック以外
````mermaid
%%{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:#FFF4DD,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#FFC800,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#005060,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFFFFF,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#cde498,stroke:#333,stroke-width:2px;
classDef clrPattern6 fill:#F0B0A0,stroke:#333,stroke-width:2px;
classDef clrPattern7 fill:lightblue,stroke:#333,stroke-width:2px;
linkStyle default stroke:gray,stroke-width:2px;
%%データ項目
1["【処理】
3: hands = {0: ゛グー゛, 1: ゛チョキ゛,
2: ゛パー゛}
"]
2["【処理】
4: decision = {0: ゛引き分け゛, 1: ゛
負け゛, 2: ゛勝ち゛}
"]
3["【処理】
6: draw = 0 # 0:引き分け, 1:負け, 2
:勝ち, 3:0~2以外の数字の時
"]
4["【処理】
7: count = 0"]
5[/" 【繰返文開始】
9: while draw == 0 or draw ==
3:
"\]:::clrPattern2
9["【出力】
10: print(゛じゃんけん・・・゛)"]:::clrPattern5
10["【処理】
11: try:"]
13["【処理】
12: player = int(input(゛0=グー,
1=チョキ, 2=パー: ゛))
"]
14{"13: 【条件文】"}:::clrPattern1
17["【処理】
14: com = random.randint(0, 2)
"]
18["【出力】
15: print(゛あなた:゛ + hands[playe
r] + ゛\t゛ + ゛あいて:゛ + hands[com
])
"]:::clrPattern5
19["【処理】
16: decision_value = (player -
com + 3) % 3
"]
20["【出力】
17: print(decision[decision_va
lue])
"]:::clrPattern5
21["【処理】
18: draw = decision_value"]
22{"19: 【条件文】"}:::clrPattern1
25["【処理】
20: count += 1"]
26{"21: 【条件文】"}:::clrPattern1
29["【出力】
22: print(゛※引き分け数が5回なので終了します。゛
)
"]:::clrPattern5
30["【break文】
23: break"]
31(("条件文
終了"))
32(("条件文
終了"))
34["【出力】
25: print(゛0~2の範囲で数字を入力してください゛
)
"]:::clrPattern5
35(("条件文
終了"))
36["【処理】
26: except ValueError:"]
37["【出力】
27: print(゛数値で入力してください゛)"]:::clrPattern5
38[\" 【繰返文終了】"/]:::clrPattern2
%%ルート設定
s([START])-->
1-->2
2-->3
3-->4
4-->5
5-->|ループ開始|9
9-->10
10-->13
13-->14
14-->|真(TRUE)|17
14-->|偽(FALSE)|34
17-->18
18-->19
19-->20
20-->21
21-->22
22-->|真(TRUE)|25
22-->|偽(FALSE)|32
25-->26
26-->|真(TRUE)|29
26-->|偽(FALSE)|31
29-->30
30-->38
31-->32
32-->35
34-->35
35-->36
36-->37
37-->38
38-->|ループ終了|e([end])
38-->|ループ継続|5
style sg1 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg1["if 0 <= player <= 2:"]
14
end
style sg2 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg2["if draw == 0:"]
22
end
style sg3 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg3["if count == 5:"]
26
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:#FFF4DD,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#FFC800,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#005060,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFFFFF,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#cde498,stroke:#333,stroke-width:2px;
classDef clrPattern6 fill:#F0B0A0,stroke:#333,stroke-width:2px;
classDef clrPattern7 fill:lightblue,stroke:#333,stroke-width:2px;
linkStyle default stroke:gray,stroke-width:2px;
%%データ項目
1["【処理】
3: hands = {0: ゛グー゛, 1: ゛チョキ゛,
2: ゛パー゛}
"]
2["【処理】
4: decision = {0: ゛引き分け゛, 1: ゛
負け゛, 2: ゛勝ち゛}
"]
3["【処理】
6: draw = 0 # 0:引き分け, 1:負け, 2
:勝ち, 3:0~2以外の数字の時
"]
4["【処理】
7: count = 0"]
5[/" 【繰返文開始】
9: while draw == 0 or draw ==
3:
"\]:::clrPattern2
9["【出力】
10: print(゛じゃんけん・・・゛)"]:::clrPattern5
10["【処理】
11: try:"]
13["【処理】
12: player = int(input(゛0=グー,
1=チョキ, 2=パー: ゛))
"]
14{"13: 【条件文】"}:::clrPattern1
17["【処理】
14: com = random.randint(0, 2)
"]
18["【出力】
15: print(゛あなた:゛ + hands[playe
r] + ゛\t゛ + ゛あいて:゛ + hands[com
])
"]:::clrPattern5
19["【処理】
16: decision_value = (player -
com + 3) % 3
"]
20["【出力】
17: print(decision[decision_va
lue])
"]:::clrPattern5
21["【処理】
18: draw = decision_value"]
22{"19: 【条件文】"}:::clrPattern1
25["【処理】
20: count += 1"]
26{"21: 【条件文】"}:::clrPattern1
29["【出力】
22: print(゛※引き分け数が5回なので終了します。゛
)
"]:::clrPattern5
30["【break文】
23: break"]
31(("条件文
終了"))
32(("条件文
終了"))
34["【出力】
25: print(゛0~2の範囲で数字を入力してください゛
)
"]:::clrPattern5
35(("条件文
終了"))
36["【処理】
26: except ValueError:"]
37["【出力】
27: print(゛数値で入力してください゛)"]:::clrPattern5
38[\" 【繰返文終了】"/]:::clrPattern2
%%ルート設定
s([START])-->
1-->2
2-->3
3-->4
4-->5
5-->|ループ開始|9
9-->10
10-->13
13-->14
14-->|真(TRUE)|17
14-->|偽(FALSE)|34
17-->18
18-->19
19-->20
20-->21
21-->22
22-->|真(TRUE)|25
22-->|偽(FALSE)|32
25-->26
26-->|真(TRUE)|29
26-->|偽(FALSE)|31
29-->30
30-->38
31-->32
32-->35
34-->35
35-->36
36-->37
37-->38
38-->|ループ終了|e([end])
38-->|ループ継続|5
style sg1 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg1["if 0 <= player <= 2:"]
14
end
style sg2 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg2["if draw == 0:"]
22
end
style sg3 color:red,fill-opacity:0, stroke-opacity:0;
subgraph sg3["if count == 5:"]
26
end