我想对一种名为 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/