Citat:
Med en del jobb tror jag att jag fick filskapandet att fungera även för Fullträff:
Kod:
import requests
import re
import json
import itertools
import sys
gamemode = int(input("Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff "))
if not gamemode in [1,2,3]:
print ("Endast 1-2 möjliga val. Avbryter.")
quit()
if gamemode == 3:
pgoal = int(input("Önskad summa (heltal) ? "))
pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? "))
pmin = pgoal-pdev
pmax = pgoal+pdev
else:
pmin = int(input("Golvnivå för antal streck (t.ex. 500)? "))
pmax = int(input("Taknivå för antal streck (t.ex. 550)? "))
mde = int(input("Tryck 1 för text-fil och 2 för CSV-fil: "))
if not mde in [1,2]:
print ("Endast 1 eller 2 möjliga val. Avbryter.")
quit()
urls = ["", "https://spela.svenskaspel.se/stryktipset" , "https://spela.svenskaspel.se/europatipset","https://spela.svenskaspel.se/fulltraff"]
url = urls[gamemode]
outfiles = ["","tips.txt","tips.csv"] # namn för dina output-filer
outfile = outfiles[mde]
response = requests.get(url)
html_content = response.text
pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});'
match = re.search(pattern, html_content)
json_str = match.group(1)
json_obj = json.loads(json_str)
gameDict = json_obj["EventTypeStatistic"]
gameKeys = list(dict.keys(gameDict))
signlists = []
if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader
rowlist=[]
draws=json_obj["Draws"]["entities"]
drawsKey = list(dict.keys(draws))[0]
omg=draws[drawsKey]["drawNumber"]
#print(draws)
#print(drawsKey)
print(f"Fullträff omgång {omg}:")
else: # annars sätt upp lista utifrån 3 tecken
for _ in range(0,3):
signlists.append([])
for gameKey in gameKeys: # iterera över alla 13 matcher
if gamemode==3: # Fullträff
game = gameDict[gameKey]["odds"]["current"]["value"] # hämtar odds-värden från Fullträff-sidan
gamesum = 0.0
floats = []
fgame = []
for i in range(0,6):
f = float(game[i])
floats.append(f)
gamesum = sum(floats)
for ix,o in enumerate(floats):
newo = 100.0 * o / gamesum # normalfördela fullträff-oddsen så att summan blir 100.0
if ix<6:
fgame.append(newo)
rowlist.append(fgame)
else: # Tipsspel
game = gameDict[gameKey]["distributions"][str(gamemode)]["Global"]["current"]["value"] # Hämta streckfördelning
if gamemode<3:
for ix,perc in enumerate(game):
if perc is not None:
signlists[ix].append(int(perc)) # använd heltal för tipsen
if gamemode<3:
P = { "1": signlists[0], "X": signlists[1], "2": signlists[2] }
rows = itertools.product(*(['1X2'] * 13))
cn = 0
with open(outfile, 'w') as f:
for row in rows:
percentage = sum(P[result][n] for (n, result) in enumerate(row))
if pmin <= percentage <= pmax:
cn += 1
if mde==1:
f.write("E,"+','.join(row)+"\n")
if mde==2:
f.write(','.join(row + (str(percentage),))+"\n")
else:
maxcoupons = 10000
cn = 0
tsts = 0
#for ix,row in enumerate(rowlist):
#print(ix,":",row)
valid_combinations = []
for comb in itertools.product(*[enumerate(row) for row in rowlist]): # Cartesian product of all rows with enumerated elements
indices, values = zip(*comb) # Unzip the enumerated pairs into indices and values
s = sum(values)
tsts += 1
if tsts % 1000000 == 0:
print(int(tsts / 1000000)," million iterations")
if pmin <= s <= pmax:
if mde == 2:
indices=list(indices)+[s]
valid_combinations.append(indices)
#print (" ".join(str(nm) for nm in indices))
cn += 1
if cn>=maxcoupons:
break
with open(outfile, 'w') as f:
f.write(f"Fulltraff,Omg={omg}\n") # första raden
for comb in valid_combinations:
if mde == 1: # TXT-läge
comb=list(comb)
comb.pop() # ta bort summa som inte används i TXT-läge
f.write("E,"+','.join(str(nm) for nm in comb)+"\n")
elif mde == 2: # CSV-läge
f.write(','.join(str(nm) for nm in comb)+"\n")
print(f"{outfile} skapad med {cn} rader!")
Hej, hoppas du hinner rätta till en detalj, jag tror jag har hittat vad som blir fel, kanske var jag som förklarade dåligt, hur som helst så har jag kollat alla 1745 raderna i Fullträff, jag skrev ner de aktuella oddsen då så jag vet hur streckfördelningen borde bli men det blir den inte.
Så här ser streckfördelningen ut på riktigt och nedanför hur den blev med de utvalda raderna:
5,668352314 13,43609437 22,39349062 24,38000995 20,38059259 13,74146015
6,301376239 16,22020921 23,60892984 23,67273776 18,43981678 11,75693016
6,029720915 15,86196853 24,38612891 23,9874456 18,15132482 11,58341123
5,99805482 17,50452733 24,78964854 24,09331009 17,15443679 10,46002243
7,647188061 19,66419787 26,16143284 23,00053993 15,16476277 8,361878534
6,357931146 17,31779341 25,25511538 23,13445684 17,48431065 10,45039257
6,774369647 16,0015283 23,73628239 22,91576893 18,74926549 11,82278524
6,196539194 17,18662758 24,03407022 23,4765789 17,86061297 11,24557113
6,394453713 17,63130927 25,43452177 23,10464191 16,81504495 10,62002839
6,576596626 15,04725308 23,93010986 24,17617783 18,44026113 11,82960148
6,396187379 16,81960385 25,58474951 23,90154231 16,97679641 10,32112054
8,438065079 21,87646502 27,43024252 21,60967886 13,32326065 7,322287878
7,058653128 18,67601973 26,13553782 23,34502467 15,59041647 9,194348177
28,08022923 18,85386819 11,80515759 12,49283668 12,26361032 16,50429799
27,27793696 14,67048711 13,23782235 13,23782235 14,61318052 16,96275072
27,16332378 16,27507163 13,63896848 9,340974212 13,86819484 19,71346705
26,76217765 14,95702006 12,83667622 12,60744986 13,18051576 19,65616046
23,5530086 14,26934097 11,86246418 13,06590258 15,35816619 21,89111748
27,50716332 13,5243553 11,69054441 14,26934097 13,35243553 19,65616046
28,252149 15,41547278 11,1747851 13,40974212 14,49856734 17,24928367
26,76217765 14,95702006 11,1747851 13,75358166 14,21203438 19,14040115
25,15759312 13,86819484 11,97707736 13,12320917 13,46704871 22,40687679
25,73065903 16,27507163 13,92550143 11,34670487 15,07163324 17,6504298
26,59025788 13,86819484 13,46704871 12,3782235 15,58739255 18,10888252
22,17765043 14,38395415 11,57593123 13,58166189 14,0974212 24,18338109
23,38108883 15,24355301 12,60744986 13,75358166 15,8739255 19,14040115
Normalfördelningen ser rätt ut, men jag tror du har glömt den viktiga detaljen att oddsen måste konverteras först, dvs 100/odds och sedan normalfördelas, mest streckade enl streck% är också lägsta oddset, därför misstänker jag när jag ser siffrorna att det är där det blivit fel.
Stryktipset ser rätt ut iaf.
__________________
Senast redigerad av Mysadname 2023-09-01 kl. 18:35.
Senast redigerad av Mysadname 2023-09-01 kl. 18:35.