我想对一种叫做Martingala的策略做一个统计研究。现在我想练习很多次,把结果加到一个列表中。问题是,尽管它是随机的,但它总是返回相同的结果。我怀疑是因为随机模块不是真正随机的。我该怎么解决?
非常感谢。
import random
print("ANÁLISIS ESTADÍSTICO DE LA MARTINGALA")
print()
print("La apuesta mínima es 1€")
dinero = int(input("Con cuanto dinero empiezas? "))
muestra = int(input("Tamaño de la muestra: "))
dinero_apostado=1
tiradas=0
datos=list()
while muestra>0:
while dinero >= dinero_apostado:
casilla=random.choices([0,1,2],[1,18,18])
casilla=casilla.pop()
if casilla == 1:
dinero = dinero + dinero_apostado
dinero_apostado = 1
elif casilla != 1:
dinero = dinero - dinero_apostado
dinero_apostado = dinero_apostado * 2
tiradas+=1
datos.append(tiradas)
muestra-=1
print(datos)
最佳答案
您当前的代码不断重复相同的结果,因为您没有在算法试验之间重置任何变量。一旦内部while
循环的条件变为False
,它将在外部循环的每次迭代中保持False
。所以主算法实际上不会运行几次。它运行一次,然后代码只重复运行一次的结果很多次。使用不同的随机数生成器没有帮助。
尝试在外部循环中移动一些变量初始化。你可能需要一个额外的变量来决定你开始用的钱的数量(因为dinero
随着游戏的进行而改变)。可能是这样的:
dinero_inicial = int(input("Con cuanto dinero empiezas? ")) # new variable used here
muestra = int(input("Tamaño de la muestra: "))
datos=list()
while muestra>0:
dinero = dinero_inicial # move some other initializations inside the outer loop
dinero_apostado = 1
tiradas = 0
while dinero >= dinero_apostado:
casilla=random.choices([0,1,2],[1,18,18])
casilla=casilla.pop()
if casilla == 1:
dinero = dinero + dinero_apostado
dinero_apostado = 1
elif casilla != 1:
dinero = dinero - dinero_apostado
dinero_apostado = dinero_apostado * 2
tiradas+=1
datos.append(tiradas)
muestra-=1
print(datos)
关于python - 如何使random.choices真正随机(我无法在Secrets模块中找到它),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50779695/