Home > Software design >  How to iterate code and save each output to a list
How to iterate code and save each output to a list

Time:03-20

I'm just learning how to code and I've encountered a problem I can't seem to work around. I've built a strategy for a simple game of chance (similar to the Martingale strategy for those familiar) and I want to run the code n number of times and save the output of each iteration so I can aggregate the results. Note the current 'for' loop is part of my code, I tried using another 'for' loop to run the entire program n times to no avail. Thanks heaps in advance. Apologies if this is a silly question. Here is my code:

import math
import random
import heartrate 
heartrate.trace(browser=True)

mult = 1.2
winChance = 0.8250

balance = 259
x = 0 
for i in range (0,500):
        bet1 = balance/259
        balance = balance-bet1
        print(balance)
        n = random.random()
        if n > winChance:
            bet2 = (bet1*(1/(mult-1))) bet1
            balance = balance-bet2  

            n = random.random()
            if n > winChance:
                bet3 = ((bet1 bet2)*(1/(mult-1))) bet1
                balance = balance-bet3

                n = random.random()
                if n > winChance:
                    bet4 = ((bet1 bet2 bet3)*(1/(mult-1))) bet1
                    balance = balance-bet4

                    n = random.random()
                    if n > winChance:
                        bet5 = ((bet1 bet2 bet3 bet4)*(1/(mult-1))) bet1
                        balance = balance-bet5
                        print("end")
                        break

                    else: 
                        balance = balance = bet4*mult

                else:
                    balance = balance   bet3*mult


            else:
                balance = balance   bet2*mult

        else:
            balance = balance   bet1*mult       


CodePudding user response:

If I understand the question and code correctly (doubtful), this change would do what you ask for: Running your original code N times (with N = 10):

$ diff -u iterate.py.orig iterate.py
--- iterate.py.orig 2022-03-20 13:02:54.010642003  0100
    iterate.py  2022-03-20 13:17:35.368615800  0100
@@ -5,10  5,12 @@
 
 mult = 1.2
 winChance = 0.8250
 end_balances = []
 
-balance = 259
-x = 0 
-for i in range (0,500):
 for _ in range(10):
     balance = 259
     x = 0 
     for i in range (0,500):
         bet1 = balance/259
         balance = balance-bet1
         print(balance)
@@ -35,7  37,7 @@
                         break
 
                     else: 
-                        balance = balance = bet4*mult
                         balance = balance   bet4*mult
 
                 else:
                     balance = balance   bet3*mult
@@ -47,3  49,6 @@
         else:
             balance = balance   bet1*mult       
 
     end_balances.append(balance)
 
 print(end_balances)

Here is the full code:

import math
import random
import heartrate 
heartrate.trace(browser=True)

mult = 1.2
winChance = 0.8250
end_balances = []

for _ in range(10):
    balance = 259
    x = 0 
    for i in range (0,500):
        bet1 = balance/259
        balance = balance-bet1
        print(balance)
        n = random.random()
        if n > winChance:
            bet2 = (bet1*(1/(mult-1))) bet1
            balance = balance-bet2  

            n = random.random()
            if n > winChance:
                bet3 = ((bet1 bet2)*(1/(mult-1))) bet1
                balance = balance-bet3

                n = random.random()
                if n > winChance:
                    bet4 = ((bet1 bet2 bet3)*(1/(mult-1))) bet1
                    balance = balance-bet4

                    n = random.random()
                    if n > winChance:
                        bet5 = ((bet1 bet2 bet3 bet4)*(1/(mult-1))) bet1
                        balance = balance-bet5
                        print("end")
                        break

                    else: 
                        balance = balance   bet4*mult

                else:
                    balance = balance   bet3*mult


            else:
                balance = balance   bet2*mult

        else:
            balance = balance   bet1*mult       

    end_balances.append(balance)

print(end_balances)

Note that you normally would extract the inner loop into a separate function.

Edit: Fixed the typo in the innermost else as well.

CodePudding user response:

You can start by creating an empty list such as:

balance_end = []

And then appending the final balance after each iteration (I have fixed the first else which had a typo as well), such as:

                else: 
                    balance = balance   bet4*mult
                    balance_end.append(balance)
            else:
                balance = balance   bet3*mult
                balance_end.append(balance)

        else:
            balance = balance   bet2*mult
            balance_end.append(balance)
    else:
        balance = balance   bet1*mult       
        balance_end.append(balance)

Finally, you can safely assume that the balance_end index will match the number of iteration - 1 and the value, is the corresponding value of said iteration.

CodePudding user response:

Here's my attempt to simplify things (to be honest, the code is quite convoluted and difficult to understand):

def bet(win_chance, previous_bets, mult):
    if random.random() > win_chance:
        this_bet = -1 * ((sum(previous_bets)*(1/(mult-1))) previous_bets[0])
    else:
        this_bet = previous_bets[-1]*mult
    return this_bet

# initialise variables
mult = 1.2
win_chance = 0.8250
balance = 259

for i in range(500):
    previous_bets = []
    previous_bets.append(balance/259)
    balance -= previous_bets[0]

    for i in range(5):
        lost = bet(win_chance, previous_bets, mult)
        balance  = previous_bets[-1]
        if not lost:
            break
    else:
        # lost streak after 5 attempts
        print('end')

    print(balance)

CodePudding user response:

create a list and append balance values to it

import math
import random
import heartrate 
heartrate.trace(browser=True)

mult = 1.2
winChance = 0.8250

balance = 259
x = 0 
values = list()
for i in range (0,500):
        stop = False
        bet1 = balance/259
        balance = balance-bet1
        print(balance)
        n = random.random()
        if n > winChance:
            bet2 = (bet1*(1/(mult-1))) bet1
            balance = balance-bet2  

            n = random.random()
            if n > winChance:
                bet3 = ((bet1 bet2)*(1/(mult-1))) bet1
                balance = balance-bet3

                n = random.random()
                if n > winChance:
                    bet4 = ((bet1 bet2 bet3)*(1/(mult-1))) bet1
                    balance = balance-bet4

                    n = random.random()
                    if n > winChance:
                        bet5 = ((bet1 bet2 bet3 bet4)*(1/(mult-1))) bet1
                        balance = balance-bet5
                        print("end")
                        stop = True

                    else: 
                        balance = balance = bet4*mult

                else:
                    balance = balance   bet3*mult


            else:
                balance = balance   bet2*mult

        else:
            balance = balance   bet1*mult       
        values.append(balance)
        if stop:
            break
  • Related