Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  10 6546
Hei der, Jeg forsøker å sette opp et enkelt treningsplan-algoritme
hvor en bruker får tildelt øvelser han skal gjennomføre, samt hvor mye sett og repetisjoner han eller henne skal gjennomføre hver eneste uke.

For å starte enkelt så har jeg 3 variabler:
rep_økning = 2 #denne styrer hvor mange repp brukeren skal øke med om gangen
uke_intervall = 2 #i dette tilfellet sier jeg at han skal øke ANNEHVER uke
totalt_antall_uker = 6 #dette skal gjøres sammenhengene i 6 uker

Når brukeren er på 1. uka i planen, så starter han eller henne med 3x8 (3 sett og 8 repetisjoner)

Brukeren skal øke med 2 repetisjoner HVERT andre uke(ikke hver uke(!), på denne spesifikke øvelsen.

Dette skal som nevnt ovenfor kjøres i en bestemt tidsramme, i dette tilfellet på 6 uker.

Da ønsker jeg at planen for denne øvelsen ut i 6 uker skal ende sånn til slutt:

uke - sett - rep
0 - 3 - 8
1 - 3 - 8
2 - 3 - 10
3 - 3 - 10
4 - 3 - 12
5 - 3 - 12


Jeg har forsøkt med noen forskjellige eksempler, og eksemplet mitt under var det nærmeste kom, men er ikke helt i mål enda, og lurte derfor på om noen kunne hjelpe.

Eksempel 1:

Kode

reps_to_perform = 8

rep_økning = 2

uke_intervall = 2

totalt_antall_uker = 6

a_counter = -1

a_liste=[]
for i in range(totalt_antall_uker):
    a_counter += 1
    a_liste.append(reps_to_perform)
    if a_counter == uke_intervall:
        print("ØK med 2 rep!")
        reps_to_perform += rep_økning
        a_liste.append(reps_to_perform)
        a_counter = 0

    print(a_counter)
print(reps_to_perform)
print(a_liste)

på eksemplet ovenfor ser lista sånn ut til slutt: [8, 8, 8, 10, 10, 10, 12, 12]
så det ender altså med en ekstra 8 tall og en ekstra 10 tall..




Eksempel 2:

Her er enda et eksempel hvor jeg er veldig nære, problemet er at det nå printes: [10, 10, 12 ,12 ,14 ,14]
istedenfor [8 ,8 ,10,10,12,12]:

Kode

   
reps_to_perform = 8

rep_økning = 2

uke_intervall = 2

totalt_antall_uker = 6

a_liste = []

for i in range(totalt_antall_uker):

   if (i % uke_intervall) == 0:
      reps_to_perform += 2
      a_liste.append(reps_to_perform)
      print("this is even")
   else:
      a_liste.append(reps_to_perform)
      print("odd")


print(a_liste)
Noen som kunne hjulpet meg med dette? På forhånd takk for svar
Sist endret av cplpro; 22. april 2021 kl. 07:45. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Tror det skal gå om du bare legger til en ekstra condition på ifi setningen i siste eksempel så det blir

HTML-kode

if (i > 0 && (i % uke_intervall) == 0):
Sikkert noe feil på syntaksen i det jeg har gjort så mulig du bør fikse, men ellers skal det gå tror jeg
Kom igjen folkens, ta det som en improvisert FizzBuzz-konkurranse!

Kode

In [1]: [[(2*i+j, 3, 8+2*i) for j in range(2)] for i in range(3)]                                                                                                                            
Out[1]: [[(0, 3, 8), (1, 3, 8)], [(2, 3, 10), (3, 3, 10)], [(4, 3, 12), (5, 3, 12)]]
Heder og ære til de mest elegante, kortfattede, uforutsigbare og merkelige løsningene!
Sist endret av Myoxocephalus; 22. april 2021 kl. 10:09. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Jeg ville brukt en counter som øker ved hver iterasjon, denne kan brukes i en if statement som sjekker mot uke_intervall.
Når den får en match så øker du repetisjonene med rep_økning, resetter counteren og fortsetter loopen.
Jeg kan ikke Python så godt, men her er en løsning i JS som kan hjelpe deg:

Kode

const reps = 8; // Reps første uke
const inc = 2; // Hvor mange uker du vil ha samme verdi
const week_inc = 2; // Hvor mye det skal øke
const total_weeks = 10; // Antall uker totalt

let weekly_reps = reps;

for (let i = 1; i <= total_weeks; i++) {
  console.log(`Uke ${i}: ${weekly_reps} reps`);
  
  if (i % inc === 0) {
    weekly_reps += week_inc;
  }
}
Testet kjapt med inc på 2 og 3 uker, og resultatet ble riktig.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Da runder jeg ut med en oneliner i C# (LINQ)

Kode

IEnumerable<int> GenerateSchedule(int startValue = 8, int increaseEvery = 3, int increaseBy = 2, int sessionCount = 12) => Enumerable.Range(0, sessionCount).Select(i => startValue + increaseBy * (i / increaseEvery));
Husker ikke (og gidder ikke sjekke) Python-syntaks.
Hva med noe slik?

Kode

reps = 8
rep_økning = 2
uke_intervall = 2
totalt_antall_uker = 6
sett = 3

treningsplan = []

for uketall in range(totalt_antall_uker):
    if uketall != 0 and uketall % uke_intervall == 0:
        reps += rep_økning
    treningsplan.append((uketall+1, sett, reps))

print ("Uke - Sett - Reps")
for uke in treningsplan:
    print ("{} - {} - {}".format(uke[0], uke[1], uke[2]))
Produserer følgende utskrift:
Uke - Sett - Reps
1 - 3 - 8
2 - 3 - 8
3 - 3 - 10
4 - 3 - 10
5 - 3 - 12
6 - 3 - 12
Vis hele sitatet...
Her er en kompakt, men kanskje ikke så skalerbar løsning i Python:

HTML-kode

a = 0
b = 3
c = 8
uker = 6
data = [(i, b, c:=c+2*((i-1)%2)*(i>0)) for i in range(a, uker)]
Sist endret av slurv; 22. april 2021 kl. 14:28. Grunn: Typo
Sitat av slurv Vis innlegg
Her er en kompakt, men kanskje ikke så skalerbar løsning i Python:

HTML-kode

a = 0
b = 3
c = 8
uker = 6
data = [(i, b, c:=c+2*((i-1)%2)*(i>0)) for i in range(a, uker)]
Vis hele sitatet...
Denne var elegant!

Takk for at du gjorde meg oppmerksom på at 3.7 er utdatert.
Sitat av Myoxocephalus Vis innlegg
Denne var elegant!

Takk for at du gjorde meg oppmerksom på at 3.7 er utdatert.
Vis hele sitatet...
Takk Jeg må innrømme at det er første gang jeg har fått bruk for walrus operatoren siden jeg oppdaget den i 3.8!

Sitat av slurv Vis innlegg
Her er en kompakt, men kanskje ikke så skalerbar løsning i Python:

HTML-kode

a = 0
b = 3
c = 8
uker = 6
data = [(i, b, c:=c+2*((i-1)%2)*(i>0)) for i in range(a, uker)]
Vis hele sitatet...

Og her er en skalerbar løsning for dem som liker å jobbe med matriser (numpy):

HTML-kode

import numpy as np

a = 0
b = 3
c = 8
uker = 6

treningsprogram = np.c_[np.arange(a,uker), np.ones(uker)*3, np.repeat(np.arange(c,c+uker,2), 2)]
print(treningsprogram)
hvilket gir:

array([
[ 0., 3., 8.],
[ 1., 3., 8.],
[ 2., 3., 10.],
[ 3., 3., 10.],
[ 4., 3., 12.],
[ 5., 3., 12.]
])
Sist endret av slurv; 22. april 2021 kl. 15:21. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Trådstarter
Sitat av ruskelusk Vis innlegg
Tror det skal gå om du bare legger til en ekstra condition på ifi setningen i siste eksempel så det blir

HTML-kode

if (i > 0 && (i % uke_intervall) == 0):
Sikkert noe feil på syntaksen i det jeg har gjort så mulig du bør fikse, men ellers skal det gå tror jeg
Vis hele sitatet...
yess! Dette funka

Sitat av mandelbrot Vis innlegg
Hva med noe slik?

Kode

reps = 8
rep_økning = 2
uke_intervall = 2
totalt_antall_uker = 6
sett = 3

treningsplan = []

for uketall in range(totalt_antall_uker):
    if uketall != 0 and uketall % uke_intervall == 0:
        reps += rep_økning
    treningsplan.append((uketall+1, sett, reps))

print ("Uke - Sett - Reps")
for uke in treningsplan:
    print ("{} - {} - {}".format(uke[0], uke[1], uke[2]))
Produserer følgende utskrift:
Vis hele sitatet...
Denne funker også veldig bra

Sitat av Rosander Vis innlegg
Jeg ville brukt en counter som øker ved hver iterasjon, denne kan brukes i en if statement som sjekker mot uke_intervall.
Når den får en match så øker du repetisjonene med rep_økning, resetter counteren og fortsetter loopen.
Vis hele sitatet...
Dette gjorde jeg også på et annet eksempel, men hjalp ikke så mye. Men poeng til deg for det om

Takk for gode svar folkens, har gitt tommel opp til så og si alle her
Sist endret av cplpro; 22. april 2021 kl. 16:20. Grunn: Automatisk sammenslåing med etterfølgende innlegg.