回答編集履歴

2

追記0.2

2022/02/15 07:34

投稿

BeatStar
BeatStar

スコア4958

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

2022/02/15 07:22

投稿

BeatStar
BeatStar

スコア4958

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