파이썬과 플라스크를 사용하여 무작위 게임 보드를 표시하고 종자를 사용하여 동일한 게임으로 돌아갈 수있게하려고합니다.파이썬 무작위 종자 씨앗 뿌리기 및 재사용
그러나 임의의 시드를 사용하든 시드를 지정하든 동일한 의사 랜덤 시퀀스를 얻는 것처럼 보입니다.
대다수의 코드를 잘라내었지만 (아래의 코드는 쪼개지 않고 numpy로 결합했습니다.) 간단한 코드는 버그를 보여줍니다 : 폼에 어떤 seed 값을 주 었는지에 관계없이 제출시 표시되는 숫자 는 똑같은. 시드를 지정하지 않고 양식을 제출하면 다른 번호가 표시되지만 다시로드 할 때 시드 값이 다르더라도 다른 번호는 항상 동일합니다.
씨 뿌리기에 문제가 있습니까? 여기
from flask import Flask, request, render_template
import numpy as np
import random
app = Flask(__name__)
@app.route('/')
def single_page():
return render_template('page.html', title = 'empty form')
@app.route('/number', methods = [ 'POST', 'GET' ])
def render_page(title = 'generated random number', error = []):
error = []
if request.method == 'POST':
if request.form['seed'].isdigit():
seed = int(request.form['seed'])
error.append("seed set: " + str(seed) + ".")
np.random.seed(seed/100000)
else:
seed = int(100000 * random.random())
error.append("seed not set, " + str(seed) + " instead.")
np.random.seed(seed/100000)
n = np.random.random() * 100;
return render_template('page.html', title=title, error=error, n=n, seed=seed)
else:
return render_template('page.html', title = 'empty form')
if __name__ == '__main__':
app.debug = True
app.run()
플라스크의 HTML 템플릿
<!doctype html>
<html>
<head><title>{{title}}</title>
</head>
<body>
{% if error != '' %}
{% for message in error %}
<h2>{{message}}</h2>
{% endfor %}
{% endif %}
{% if n %}
<h2>Random number is {{n}}</h2>
<h6>seed = {{ seed }}</h6>
{% else %}
<div id="form">
<form id="the_form" method="POST" action="number">
Seed: <input type="number" min="1" max="99999" id="seed" name="seed"><br>
<button id="submit" type="submit">Submit</button>
</form>
{% endif %}
</div>
</body>
</html>
내가 곱 더 기억에 남는 값을 제공 할 수 있도록 10 만하여 씨앗을 분할 (예를 들어, 4231 대신 4.231479094의 ...)입니다. 사용 가능한 정수 시드 값을 갖는 더 좋은 방법이 있습니까?
업데이트 : 예, 정수 나누기를 수행하는 더 좋은 방법은 있습니다. 전혀 나누지 않는 것이 좋습니다. 당분간 이것은 내가하고있는 일이다 :
import numpy as np
import random
.
.
.
if request.form['seed'].isdigit():
seed = int(request.form['seed'])
error.append("seed set: " + str(seed) + ".")
random.seed(seed)
else:
seed = int(100000 * np.random.random())
error.append("seed not set, " + str(seed) + " instead.")
random.seed(seed)
n = random.random() * 100;
return render_template('page.html', title=title, error=error, n=n, seed=seed)
이것은 잘 동작한다. np.random.seed()는 항상 동일한 시퀀스를 얻지 못했지만 random.seed()는 정수를 신경 쓰지 않으므로 후자를 사용합니다.
, 나는 ValueError를 얻을 : 원하는 배열 – mikelietz
내 실수에 대해 너무 작은 깊이의 목적은, 내가 고칠 수 있습니다. numpy seed가 float을 취한 것으로 생각했습니다. int가 필요합니다. http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.mtrand.RandomState.html – Hooked
강제로 부동 소수점을 상속 받아 전환하면 랜덤 (np.random이 아닌)을 사용하면 원래의 100000 값으로 작동합니다. np.random 대신 random을 사용하지 않는 이유가 있을까요? – mikelietz