回答編集履歴
2
追記0.2
test
CHANGED
@@ -82,6 +82,53 @@
|
|
82
82
|
|
83
83
|
となる。
|
84
84
|
|
85
|
+
(3.2)で {グー,チョキ,パー} という選択肢を与える。(3.3)で``your_hand = "グー"``となる。
|
86
|
+
(3.4)で ``CPU_hand = "チョキ"``となる。
|
85
87
|
|
88
|
+
ここまでの変数内のデータを整理すると、
|
86
89
|
|
90
|
+
```
|
91
|
+
a = "0"
|
92
|
+
your_hand_num = 0
|
93
|
+
CPU_hand_num = 1
|
94
|
+
hand = { グー, チョキ, パー } のいずれか ( as 選択肢 )
|
95
|
+
your_hand = "グー"
|
96
|
+
CPU_hand = "チョキ"
|
97
|
+
```
|
98
|
+
(3.5)では単に表示しているだけなのでスルー。(3.6)で your_hand == CPU_hand となるかチェックしているが、your_hand = "グー", CPU_hand = "チョキ"なので、``if "グー" == "チョキ":`` という事になり、偽になりますね。
|
87
99
|
|
100
|
+
よって(3.6.1)は処理せずに(3)に戻る。(無限ループなので)
|
101
|
+
|
102
|
+
(3.1)で CPU_hand_numが再発行される。仮に「0」とする。
|
103
|
+
(3.2)で選択肢 { グー, チョキ, パー } が再発行される。
|
104
|
+
|
105
|
+
つまり、現時点では、
|
106
|
+
|
107
|
+
```
|
108
|
+
a = "0"
|
109
|
+
your_hand_num = 0
|
110
|
+
CPU_hand_num = 0
|
111
|
+
hand = { グー, チョキ, パー } のいずれか ( as 選択肢 )
|
112
|
+
```
|
113
|
+
|
114
|
+
となる。
|
115
|
+
|
116
|
+
your_handやらなんやらを決めると、
|
117
|
+
|
118
|
+
```
|
119
|
+
a = "0"
|
120
|
+
your_hand_num = 0
|
121
|
+
CPU_hand_num = 0
|
122
|
+
hand = { グー, チョキ, パー } のいずれか ( as 選択肢 )
|
123
|
+
your_hand = "グー"
|
124
|
+
CPU_hand = "グー"
|
125
|
+
```
|
126
|
+
|
127
|
+
で、(3.6)では ``if "グー" == "グー":``なので 真に。つまり(3.6.1)が処理される。
|
128
|
+
そんでもって、(3)に戻る。...
|
129
|
+
|
130
|
+
と考えてみると、「いつyour_hand_numが書き換えられる」のでしょうか?
|
131
|
+
書き換えられているのはせいぜい、(2)だけです。それは(3)の無限ループの対象ではないので一回限りの処理になり、再発行されません。上書きもされません。
|
132
|
+
そりゃ書き換わるわけないでしょ。って話です。
|
133
|
+
|
134
|
+
プログラムは書いた通りにしか動きません。なのでコードを読むなり、**デバッグをするなり**してロジックを修正するのです。
|
1
追記0
test
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
|
32
32
|
# ユーザ入力を受け付け、変数 aにセット
|
33
33
|
a=input()
|
34
|
-
# aの値を整数として変換し、変数 your_hand にセット
|
34
|
+
# aの値を整数として変換し、変数 your_hand_num にセット
|
35
35
|
your_hand_num=int(a)
|
36
36
|
# 無限ループ
|
37
37
|
while True:
|
@@ -55,6 +55,32 @@
|
|
55
55
|
|
56
56
|
これを**疑似コード**として切り出す。
|
57
57
|
|
58
|
+
```
|
59
|
+
1. ユーザ入力を受け付け、変数 aにセット
|
60
|
+
2. aの値を整数として変換し、変数 your_hand_num にセット
|
61
|
+
3. 無限ループ
|
62
|
+
3.1. 0~2の乱数を生成し、変数 CPU_hand_numにセット
|
63
|
+
3.2. 配列 hands を { グー, チョキ, パー } とする
|
64
|
+
3.3. ユーザの整数データを{ グー, チョキ, パー }のいずれかに変換し、変数 your_hand にセット
|
65
|
+
3.4. CPU_handも同様に
|
66
|
+
3.5. それぞれの手を文字列で表示
|
67
|
+
3.6. CPUとユーザの手が同じなら
|
68
|
+
3.6.1.「あいこです」と表示
|
69
|
+
```
|
70
|
+
|
71
|
+
これを現実世界でシミュレーションしてみてください。算数の問題を解く手順とか料理のレシピとかととらえて。
|
72
|
+
実際に値を入れて考えてみるとか。
|
73
|
+
|
74
|
+
まず、(1)で 「0」が入力されたとする。すると、``a = "0"`` となる。
|
75
|
+
(2)で整数に変換。(3)で無限ループ。(3.1)で乱数が「1」だとする。すると、
|
76
|
+
|
77
|
+
```
|
78
|
+
a = "0"
|
79
|
+
your_hand_num = 0
|
80
|
+
CPU_hand_num = 1
|
81
|
+
```
|
82
|
+
|
83
|
+
となる。
|
58
84
|
|
59
85
|
|
60
86
|
|