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

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

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

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

Q&A

解決済

1回答

3287閲覧

Python: ランダムな移動データを作成したいです

TeRa_130

総合スコア61

Python

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

0グッド

0クリップ

投稿2019/05/14 07:51

ランダムな移動データを作成したいです

Pythonを使用しています。
(10,10)から上下左右に連続して動くランダムな移動データを作成しようと考えています。
下に書いたコードと、その結果を載せています。

python

1data = [[10,10]] 2c = [[0,-1],[0,1],[-1,0],[1,0]] 3 4rand_0 = random.randint(0,3) 5appe_0 = [data[-1][0]+c[rand_0][0], data[-1][1]+c[rand_0][1]] 6data.append(appe_0) 7 8rand_1 = random.randint(0,3) 9appe_1 = [data[-1][0]+c[rand_0][0], data[-1][1]+c[rand_0][1]] 10data.append(appe_1) 11 12rand_2 = random.randint(0,3) 13appe_2 = [data[-1][0]+c[rand_1][0], data[-1][1]+c[rand_1][1]] 14data.append(appe_2) 15 16rand_3 = random.randint(0,3) 17appe_3 = [data[-1][0]+c[rand_2][0], data[-1][1]+c[rand_2][1]] 18data.append(appe_3) 19 20print(data) 21 22 23Out: 24[[10, 10], [9, 10], [8, 10], [8, 11], [8, 10]]

この処理を手作業で行うのはとても厳しので、何とか自動化したいと考えています。

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

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

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

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

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

tetsunosuke

2019/05/14 07:57

スジとしては別に悪くないような気がします 例えば100歩分のデータをつくりたいということでしょうか? ``` for i in range(1, 101): rand = random.randint(0,3) appe = [data[-1][0]+c[rand][0], data[-1][1]+c[rand][1]] data.append(appe) ``` こんな感じにしたい、ということですか??
TeRa_130

2019/05/14 08:24

ご回答ありがとうございます。 「100歩分のデータを作成したいか」という質問にお答えするなら、まさしくその通りです。 考えてることとしては、data[i]のiの数を指定した分だけ欲しいと思っています。 実力不足でコードの書き方がわからないのですが、data[i][0]とdata[i][1]は0~12の範囲で作成したいと思っています。
tetsunosuke

2019/05/14 08:37

回答者が回答されている方法で良さそうですね。range(n) で n回分ループできるので。
guest

回答1

0

ベストアンサー

単純にループで処理すればよいでのは?
また、移動範囲も制限しました。範囲を越えた移動はキャンセルするようにしています。

Python

1import random 2from pprint import pprint 3 4data = [[10,10]] 5c = [[0,-1],[0,1],[-1,0],[1,0]] 6 7for i in range(100): 8 rand_0 = random.randint(0,3) 9 pos = [data[-1][0]+c[rand_0][0], data[-1][1]+c[rand_0][1]] 10 11 # 移動範囲の制限=移動しないように 12 if pos[0] < 0: pos[0] = 0 13 if pos[0] > 12: pos[0] =12 14 if pos[1] < 0: pos[1] = 0 15 if pos[1] > 12: pos[1] =12 16 17 data.append(pos) 18 19pprint(data) # [[10, 10], [10, 11], [9, 11], [8, 11], [9, 11]]

投稿2019/05/14 07:56

編集2019/05/14 08:39
can110

総合スコア38266

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

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

TeRa_130

2019/05/14 08:26

ご回答ありがとうございます。 ループ処理での書き方がわからなかったので、ありがたいです。
TeRa_130

2019/05/14 08:43

回答の追加ありがとうございます。 非常に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問