#38
by 沖 滉均 » 6年前
keito94 さんが書きました:>>沖さん
たしかに条件満たしているはずなのにTrueなってない!!
でも、デバッグの仕方がようやくわかり始めたから、テスト用のコードの提供はありがたいです!!
コード:
data_load関数の条件確認
map_data:[[]]
i:0
j:0
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 0, 0))]
j:1
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 1, 0))]
j:2
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 2, 0))]
j:3
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 3, 0))]
j:4
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 4, 0))]
i:1
j:0
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 0, 1))]
j:1
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 1, 1))]
j:2
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 2, 1))]
j:3
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 3, 1))]
j:4
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 4, 1))]
以下略…
表示と実行結果が一致していないですね。
表示されている条件に変えたのであれば下記のようになっているはずです。
► スポイラーを表示
コード:
print("data_load関数の条件確認")
map_data = [[]]
print("map_data:{}".format(map_data))
for i in range(5):
print("i:{}".format(i))
for j in range(5):
print(" j:{}".format(j))
print(" i <= 1 and j == 0:{}".format(i <= 1 and j == 0))
if i <= 1 and j == 0:
print(" map_data.append([self.get_pos(1, {}, {}))]".format(j, i))
else:
print(" map_data[{}].append([self.get_pos(1, {}, {}))]".format(i, j, i))
コード:
data_load関数の条件確認
map_data:[[]]
i:0
j:0
i <= 1 and j == 0:True
map_data.append([self.get_pos(1, 0, 0))]
j:1
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 1, 0))]
j:2
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 2, 0))]
j:3
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 3, 0))]
j:4
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 4, 0))]
i:1
j:0
i <= 1 and j == 0:True
map_data.append([self.get_pos(1, 0, 1))]
j:1
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 1, 1))]
j:2
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 2, 1))]
j:3
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 3, 1))]
j:4
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 4, 1))]
i:2
j:0
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 0, 2))]
j:1
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 1, 2))]
j:2
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 2, 2))]
j:3
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 3, 2))]
j:4
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 4, 2))]
i:3
j:0
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 0, 3))]
j:1
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 1, 3))]
j:2
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 2, 3))]
j:3
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 3, 3))]
j:4
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 4, 3))]
i:4
j:0
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 0, 4))]
j:1
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 1, 4))]
j:2
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 2, 4))]
j:3
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 3, 4))]
j:4
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 4, 4))]
まず、rangeの引数については3つの方法があります。
①range(stop)
②range(start, stop)
③range(start, stop, step)
今回は①の指定なので、この場合、startは0(デフォルト値)となるため、iは0~(stop - 1)までの値を取ります。
そう考えると条件がおかしいことに気づくんじゃないでしょうか?
また、今後の話をする上で確認です。
keito94 さんが書きました:shira211 さんが書きました:ちなみにNo:32の結果はif文を使わないやり方でやりました。(asdさんと同じなのかな?)
えっ、if文は使わなくてもできるのですか!?初めて知りました。
>>asdさん
ボクはprintデバッグよりも、GUIのブレークポイント派ではあるのですが、そこまでは気づきませんでした…。
上記のように、asdさん、shira211さんともにif文を使用しない方法で行なっています。
私も基本的にはif文を使用しない方法がスマートで良い方法だと考えています。(もちろんif文を使ってはいけないということではありません)
そこで、keito94さんはこのままif文を使用した方法で正しい条件を見つける方向ですすめていくのか
if文を使わない方法で進めていくのかを答えてください。
ただし、range関数が取り得る値については必ずドキュメントを読み理解してから先に進むようにしてください
https://docs.python.jp/3/library/stdtypes.html#range
オフトピック
なお、asdさん、shira211さんへの返答について指摘事項がありますが、一度に色々書くと全部読まないのでこの件が終了後に改めて指摘します
[quote="keito94" id=3,19442,147211]>>沖さん
たしかに条件満たしているはずなのにTrueなってない!!
でも、デバッグの仕方がようやくわかり始めたから、テスト用のコードの提供はありがたいです!!
[code]
data_load関数の条件確認
map_data:[[]]
i:0
j:0
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 0, 0))]
j:1
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 1, 0))]
j:2
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 2, 0))]
j:3
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 3, 0))]
j:4
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 4, 0))]
i:1
j:0
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 0, 1))]
j:1
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 1, 1))]
j:2
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 2, 1))]
j:3
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 3, 1))]
j:4
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 4, 1))]
以下略…
[/code][/quote]
表示と実行結果が一致していないですね。
表示されている条件に変えたのであれば下記のようになっているはずです。
[spoil][code]print("data_load関数の条件確認")
map_data = [[]]
print("map_data:{}".format(map_data))
for i in range(5):
print("i:{}".format(i))
for j in range(5):
print(" j:{}".format(j))
print(" i <= 1 and j == 0:{}".format(i <= 1 and j == 0))
if i <= 1 and j == 0:
print(" map_data.append([self.get_pos(1, {}, {}))]".format(j, i))
else:
print(" map_data[{}].append([self.get_pos(1, {}, {}))]".format(i, j, i))[/code]
[code=text]data_load関数の条件確認
map_data:[[]]
i:0
j:0
i <= 1 and j == 0:True
map_data.append([self.get_pos(1, 0, 0))]
j:1
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 1, 0))]
j:2
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 2, 0))]
j:3
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 3, 0))]
j:4
i <= 1 and j == 0:False
map_data[0].append([self.get_pos(1, 4, 0))]
i:1
j:0
i <= 1 and j == 0:True
map_data.append([self.get_pos(1, 0, 1))]
j:1
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 1, 1))]
j:2
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 2, 1))]
j:3
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 3, 1))]
j:4
i <= 1 and j == 0:False
map_data[1].append([self.get_pos(1, 4, 1))]
i:2
j:0
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 0, 2))]
j:1
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 1, 2))]
j:2
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 2, 2))]
j:3
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 3, 2))]
j:4
i <= 1 and j == 0:False
map_data[2].append([self.get_pos(1, 4, 2))]
i:3
j:0
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 0, 3))]
j:1
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 1, 3))]
j:2
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 2, 3))]
j:3
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 3, 3))]
j:4
i <= 1 and j == 0:False
map_data[3].append([self.get_pos(1, 4, 3))]
i:4
j:0
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 0, 4))]
j:1
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 1, 4))]
j:2
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 2, 4))]
j:3
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 3, 4))]
j:4
i <= 1 and j == 0:False
map_data[4].append([self.get_pos(1, 4, 4))][/code][/spoil]
まず、rangeの引数については3つの方法があります。
①range(stop)
②range(start, stop)
③range(start, stop, step)
今回は①の指定なので、この場合、startは0(デフォルト値)となるため、iは0~(stop - 1)までの値を取ります。
そう考えると条件がおかしいことに気づくんじゃないでしょうか?
また、今後の話をする上で確認です。
[quote="keito94" id=3,19442,147211][quote="shira211" id=3,19442,147187]ちなみにNo:32の結果はif文を使わないやり方でやりました。(asdさんと同じなのかな?)[/quote]
えっ、if文は使わなくてもできるのですか!?初めて知りました。
>>asdさん
ボクはprintデバッグよりも、GUIのブレークポイント派ではあるのですが、そこまでは気づきませんでした…。[/quote]
上記のように、asdさん、shira211さんともにif文を使用しない方法で行なっています。
私も基本的にはif文を使用しない方法がスマートで良い方法だと考えています。(もちろんif文を使ってはいけないということではありません)
そこで、keito94さんはこのままif文を使用した方法で正しい条件を見つける方向ですすめていくのか
if文を使わない方法で進めていくのかを答えてください。
ただし、range関数が取り得る値については必ずドキュメントを読み理解してから先に進むようにしてください
https://docs.python.jp/3/library/stdtypes.html#range
[offtopic]なお、asdさん、shira211さんへの返答について指摘事項がありますが、一度に色々書くと全部読まないのでこの件が終了後に改めて指摘します[/offtopic]