質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

393閲覧

drivegameのマップを作成中ですが、実行結果がNoneと出ます。どの箇所をどう直せば良いのでしょうか。

proTiku

総合スコア13

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/02/12 10:00

編集2019/02/12 10:14

python

1コード 2from random import randint 3 4def create_map_line(ginfo): 5 if randint(0, 99) < 10: 6 ginfo["dir"] = randint(-1, 1) 7 cx, sz, gdir = (ginfo["cx"], ginfo["size"], ginfo["dir"]) 8 if (gdir == -1 and cx <= 1): 9 ginfo["dir"] *=-1 10 if (gdir == 1 and (cx + sz) >= (ginfo["cols"] - 1)): 11 ginfo["dir"] *= -1 12 ginfo["cx"] += ginfo["dir"] 13 line = [1] * ginfo["cols"] 14 for i in range(ginfo["size"]): 15 line[i + ginfo["cx"]] = 0 16 return line 17def create_map(ginfo): 18 map_data = [] 19 for i in range(ginfo["rows"]): 20 line = create_map_line(ginfo) 21 map_data.insert(0, line) 22 return map_data 23 24if __name__ == "__main__": 25 ginfo = { 26 "rows": 20, 27 "cols": 30, 28 "dir": 0, 29 "cx": 10, 30 "size": 8 31 } 32 map_data = create_map(ginfo) 33 for row in map_data: print(row)``` 34コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/02/12 10:04

インデントが潰れて読めません。https://teratail.com/tour を参考に質問文を再編集し、シンタックスハイライト・マークダウンでコードを囲んでください。 問題のもう少し詳しい説明、実行結果、それを受けて試したことなどを書くと回答が得られやすいです。
proTiku

2019/02/12 10:20

お待たせしました。 問題については0,1の数字を用いて0が走行可能部分で1が走行不可部分の道を作成したいのですが、実行結果はNoneが羅列されるだけでした。 試したことはデバッカーを使用して、map_data = []にNoneと表示されることを突き止めました。
guest

回答1

0

どんな結果になればいいのかまではわからないので、Noneとなる原因だけ指摘します。

create_map_lineの最後の以下の部分

Python

1 if (gdir == 1 and (cx + sz) >= (ginfo["cols"] - 1)): 2 ginfo["dir"] *= -1 3 ginfo["cx"] += ginfo["dir"] 4 line = [1] * ginfo["cols"] 5 for i in range(ginfo["size"]): 6 line[i + ginfo["cx"]] = 0 7 return line

returnがif文の中に入っています。
これではif文がTrueの時しかlineの値をreturnしないので、
if文の条件がFalseだった場合はNoneが返ってしまいます。

つまりは

Python

1if (gdir == 1 and (cx + sz) >= (ginfo["cols"] - 1)):

がFalseになるのでNoneが返っているのが現状です。

そこの条件がFalseの場合はどうすれば良いか、処理を追加すれば対策できるかと思います。

投稿2019/02/12 10:31

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

proTiku

2019/02/12 13:35

色々、試行していると以下の実行結果が出ました。 Noneの箇所を全て数値化させるには如何すれば良いのでしょうか。 None [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] None [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] None None None None None [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] None None None [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] None None [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] None None
dice142

2019/02/13 02:09

> Noneの箇所を全て数値化させるには如何すれば良いのでしょうか。 returnされないパターンがあることが原因だとおもいます。 returnがif文の内側にしか無いのであれば、全パターンを網羅しているか確認しましょう。 あるいはどのif文にもあてはまらなかったときのために、一番最後に必ず何かをreturnするという手もあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問