繁体   English   中英

我无法在一定时间内循环运行 function

[英]I can't run a function in a loop for certain amount of time

好的,所以我有这个 function,它包含在一个总是返回随机值的游戏中,

def juego():

   movimientos = []

   premio = 0

   premios = {1:10, 2:5, 3:2, 4:1, 5:0.5, 6:0, 7:0.5, 8:1, 9:2, 10:5, 11:10}

   primer_movimiento = random.choice([1,2])
   
   secuencia = []
   
   if primer_movimiento == 1:
       
       secuencia.append('Izquierda')
   
   else:
       
       secuencia.append('Derecha')

   movimientos.append(primer_movimiento)

   for i in range(10):
       
       casilla = random.choice([movimientos[i],movimientos[i]+1])

       movimientos.append(casilla)
       
   for j in range(1,11):
       
       if movimientos[j] == movimientos[j-1]:
           
           secuencia.append('Izquierda')
       else:
           
           secuencia.append('Derecha')
       

   premio = premios[movimientos[-1]]

   movimiento_premio = {'premio': premio, 'secuencia':secuencia, 'movimientos':movimientos }

   return movimiento_premio

问题是我想运行这个 function 10,000 次以接收 10,000 个不同的值,当我单独运行它时它可以工作,但是当我用循环运行它时,它会显示这个错误:

环形:

premio_acumulado = []

for i in range(10000):
   
   premio_acumulado.append(juego()['premio'])

这是它出现的错误:

KeyError                                  Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_22100/4261353443.py in <module>
      3 for i in range(10000):
      4 
----> 5     premio_acumulado.append(juego()['premio'])
      6 
      7 

~\AppData\Local\Temp/ipykernel_22100/2828093291.py in juego()
     39 
     40 
---> 41     premio = premios[movimientos[-1]]
     42 
     43     movimiento_premio = {'premio': premio, 'secuencia':secuencia, 'movimientos':movimientos }

KeyError: 12

简而言之:

词典premios没有12键。

movimientos[-1]有可能在您的 function 中等于12因此premios[movimientos[-1]]将引发 KeyError KeyError: 12

Go通过代码:

每次,您都将12附加到movimientos

然后, casillamovimientos[i]movimientos[i] + 1中选择一个值。 之后, casilla被附加到movimientos

这是问题所在:

对于足够大的迭代,如果casilla一直选择movimientos[i] + 1 ,则movimientos中的元素有可能超过11 一旦发生这种情况,由于premios中不存在12 ,因此会发生密钥错误。

潜在的解决方案:

您可能希望使用random.randint()来选择随机整数。

for i in range(10):

    casilla = random.randint(1, 11)

    movimientos.append(casilla)

此外, juego()['premio']不必要地复杂。 该循环也可以在 function 内部实现。 这样,您可以向function输入一个数字n ,function将运行n次。

好吧,正如我所见,请记住我对这种语言不是很流利,而且我可能不完全准确,但是:

我认为错误的是,因为premios只有 1 - 11 并且不包含“12”作为键,所以它给你一个错误。

所以在这个循环中:

for i in range(10):
       
       casilla = random.choice([movimientos[i],movimientos[i]+1])

       movimientos.append(casilla)

由于primer_movimiento正在返回random.choice([1, 2])movimientos[i]+1不会从 1, 11 返回,而是返回 1, 12。

而且由于 premios 不包含以 12 作为键的定义,它会给你一个错误。

而是替换:

for i in range(10):
       
       casilla = random.choice([movimientos[i],movimientos[i]+1])

       movimientos.append(casilla)

for i in range(9):
       
       casilla = random.choice([movimientos[i],movimientos[i]+1])

       movimientos.append(casilla)

这不是时间问题:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM