【问题标题】:How to make a loop in a loop (Python)?如何在循环中创建循环(Python)?
【发布时间】:2020-09-16 01:29:36
【问题描述】:

我想在一个循环中执行一个循环,但是当我尝试这样做时,与单一循环相比,我发现了一个错误的计算。

我的代码带有一个有效的单循环:

betresult = []

#main parameters
budget = 1500
numofbets = 100
win = 7.5
loss = -15


for i in range(numofbets):
    #random list: 1 - win, 0 - loss
    test = np.random.choice(np.arange(0, 2), p=[0.333, 0.667])
    betresult.append(test)

    #number of win and loss
    winbets = np.sum(betresult)
    lossbets = numofbets - winbets

    #sum of win and loss
    winsum = winbets * win
    losssum = lossbets * loss

    #final sum
    result = budget - (winsum + losssum)

print(result)

我想将该代码放入一个新循环中,但如果我用whilefor 做某事,我会发现计算错误。

使用奇异循环我通常会得到one number between 1100 and 1800

计算错误的代码:

betresult = []

#main parameters
budget = 1500
numofbets = 100
win = 7.5
loss = -15

for i in range(10):   
    for j in range(numofbets):
        #random list: 1 - win, 0 - loss
        test = np.random.choice(np.arange(0, 2), p=[0.333, 0.667])
        betresult.append(test)

        #number of win and loss
        winbets = np.sum(betresult)
        lossbets = numofbets - winbets

        #sum of win and loss
        winsum = winbets * win
        losssum = lossbets * loss

        #final sum
        result = budget - (winsum + losssum)

     print(result)

使用双循环我通常会得到a number under 0。并且循环范围越大,0以下的数字越大。

错误执行(计算)示例:

1470.0
7.5
-1590.0
-3007.5
-4447.5
-5910.0
-7440.0
-8835.0
-10410.0
-11985.0

【问题讨论】:

  • 与pandas无关,去掉标签
  • 对于我们看不到的代码,我们无能为力。添加尝试在循环中执行循环的代码。你能解释一下“我计算错误”是什么意思吗?
  • python 对缩进很敏感。您的第二个 for 循环需要缩进第一个。这意味着第二个 for 循环语句需要缩进,其中的任何内容都应该缩进两次。任何缩进一次的内容仅在第一个 for 循环内,任何缩进两次的内容都在第二个循环内(它本身在第一个循环内)。也不要使用“i”两次作为超出范围的变量,这将导致它自己覆盖并导致问题。
  • 你还没有缩进内部循环。
  • 如果你不使用迭代变量,约定是使用_:for _ in range(10): for _ in range(numofbets):

标签: python numpy loops


【解决方案1】:

问题是 betresult 附加了 10 次迭代的所有值,这就是你得到否定答案的原因

import numpy as np


#main parameters
budget = 1500
numofbets = 100
win = 7.5
loss = -15

for i in range(10):
    #declaring inside the first loop
    betresult = []
    for j in range(numofbets):
        #random list: 1 - win, 0 - loss
        test = np.random.choice(np.arange(0, 2), p=[0.333, 0.667])
        betresult.append(test)

        #number of win and loss
        winbets = np.sum(betresult)
        lossbets = numofbets - winbets

        #sum of win and loss
        winsum = winbets * win
        losssum = lossbets * loss

        #final sum
        result = budget - (winsum + losssum)
    print(result)

【讨论】:

    【解决方案2】:
    import numpy as np
    betresult = []
    
    #main parameters
    budget = 1500
    numofbets = 100
    win = 7.5
    loss = -15
    summary = 0
    for i in range(80):   
        for i in range(numofbets):
            test = np.random.choice(np.arange(0, 2), p=[0.333, 0.667])
            betresult.append(test)
    
            winbets = np.sum(betresult)
            lossbets = numofbets - winbets
    
            winsum = winbets * win
            losssum = lossbets * loss
    
            result = budget - (winsum + losssum)
         #betresult.clear() should be outside the second loop
         betresult.clear()
    
    print(result)
    

    我认为您需要在每次运行此循环时清除您的 betresult。 也许你需要一些额外的代码来计算,这取决于你想要什么。

    【讨论】:

    • 我认为您需要将betresult.clear() 放在外循环中,而不是内循环中。只需将bestresult = [] 移动到循环的开头即可。
    • @btnvstusrnm 没有提及
    猜你喜欢
    • 2014-06-19
    • 2021-10-15
    • 2020-02-15
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多