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

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

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

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

Q&A

解決済

1回答

312閲覧

複数の乱数を定義する方法

suugaku_nyumon

総合スコア37

Python

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

0グッド

0クリップ

投稿2018/12/04 15:28

質問

前の質問で変更したコードをさらに変更して、各セルが、確率つきのある規則に合わせて動くようなプログラムを作成しようとしました。

※コードに関しては、描画とロジックを混在した状態でのものを変更して投稿しております。すみません。

下のコードについて、下のコードでr_i=random.random()としたのですが、いざコードを書いてプログラムを実行すると、それぞれのセルが同じように動いていることから、同じ乱数が代入されているのではないかと思いました。

それぞれのセルにおいて乱数を定義してプログラムを実行したいのですが、どうすれば乱数を複数定義することができますか?

Python3

1from tkinter import * 2import time 3import tkinter as tk 4import random 5import math 6#配列の宣言 7def array2(N1,N2): 8 return [[0 for j in range(N2)]for k in range(N1)] 9def array3(N1,N2,N3): 10 return [array2(N2,N3)for k in range(N1)] 11#セルの初期設定 12def initdt(): 13 A=array3(1000,31,31) 14 for i in range(1,31): 15 A[0][i][15]=i % 4 16 return A 17#セルオートマトンの実行 18def execCell(A,i1): 19 i2 = 1 + i1 20 for i in range(1,30): 21 r_i=random.random() 22 for i in range(1,30): 23 if (r_i <= 0.50): 24 A[i2][i][15] = (A[i1][i][15] + 1) % 4 25 if (r_i > 0.50): 26 A[i2][i][15] = (A[i1][i][15] - 1) % 4 27#セルの位置決めとIDの設定 28def drawCell(canvas,A,k): 29 x2=0 30 CID=array2(31,31) 31 for i in range(1,30): 32 x1=x2 33 x2=x1+10 34 y2=0 35 for j in range(1,30): 36 y1=y2 37 y2=y1+10 38 CID[i][j]=canvas.create_rectangle(x1,y1,x2,y2,fill='black') 39 return CID 40#セルの色設定 41def modifyCell(canvas,A,k,CID): 42 CL=['black','#ff0000','#00FF00','#0000ff'] 43 for i in range(1,30): 44 for j in range(1,30): 45 canvas.itemconfig(CID[i][j],fill=CL[A[k][i][j]]) 46 canvas.itemconfig(CID[i][j],outline=CL[A[k][i][j]]) 47#Tk初期設定 48def initTk(): 49 tk=Tk(); tk.title("2D Cell Automaton"); tk.resizable(0,0) 50 return tk 51#画面キャプチャ用 52def leftMouseDown(event): 53 global canvas, A,k,CID 54 modifyCell(canvas,A,k,CID) 55 execCell(A,k) 56#実行メイン 57A=initdt() 58root=initTk() 59canvas=Canvas(root,width=290,height=290,highlightthickness=0) 60canvas.pack() 61CID=drawCell(canvas,A,0) 62k=0 63 64def animate(): 65 global k 66 modifyCell(canvas, A, k, CID) 67 execCell(A,k) 68 k = 1 + k 69 root.after(200, animate) 70 71root.after(200, animate) 72root.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下の部分ですが、r_iには最後に生成した乱数しか設定されてません。
これはコーディングミスで、

python

1#セルオートマトンの実行 2def execCell(A,i1): 3 i2 = 1 + i1 4 for i in range(1,30): 5 r_i=random.random() 6 for i in range(1,30): 7 if (r_i <= 0.50): 8 A[i2][i][15] = (A[i1][i][15] + 1) % 4 9 if (r_i > 0.50): 10 A[i2][i][15] = (A[i1][i][15] - 1) % 4

やりたいことは以下の実装だったりしませんか?

python

1#セルオートマトンの実行 2def execCell(A,i1): 3 i2 = 1 + i1 4 for i in range(1,30): 5 r_i=random.random() 6 if (r_i <= 0.50): 7 A[i2][i][15] = (A[i1][i][15] + 1) % 4 8 if (r_i > 0.50): 9 A[i2][i][15] = (A[i1][i][15] - 1) % 4

投稿2018/12/04 15:37

TaroToyotomi

総合スコア1430

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

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

suugaku_nyumon

2018/12/04 16:10

はい!そうです。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問