Nybörjare som vill lära sig Python

Permalänk
Medlem

Nybörjare som vill lära sig Python

Hej. Jag har länge haft ett intresse och planer på lära mig Python men aldrig kommit till skott pga sjukdom och känner nu att jag inte vill längre skjuta upp det. Vill göra något nytta under tiden man är sjuk. Jag har absolut inga som helst kunskaper inom området. Därför söker jag råd och hjälp på hur på bästa möjliga sätt att börja från noll och lära mig Python. Vill gärna lära mig allt då jag hoppas att det går bra för mig så jag kan få ett jobb inom detta område. Jag hoppas ni orkar avvara lite av er tid och ge lite tips på hur jag ska starta på bästa möjliga vis. Tack på förhand

Permalänk
Medlem

Pythons officiella guide är en bra startpunkt.

Permalänk

Bra pythonkurs med exempel och övningar för nybörjare.
https://www.udemy.com/course/complete-python-bootcamp/

Permalänk
Medlem

Realpython har en del guider:
https://realpython.com/python-first-steps/

Visa signatur

| 212965 00 ] == :^D * ==)

Permalänk
Medlem

Riktigt bra kurser finns här:
https://www.codecademy.com/learn/learn-python

Visa signatur

Ryzen 9 5950X, 32GB 3600MHz CL16, SN850 500GB SN750 2TB, B550 ROG, 3090 24 GB
Har haft dessa GPUer: Tseng ET6000, Matrox M3D, 3DFX Voodoo 1-3, nVidia Riva 128, TNT, TNT2, Geforce 256 SDR+DDR, Geforce 2mx, 3, GT 8600m, GTX460 SLI, GTX580, GTX670 SLI, 1080 ti, 2080 ti, 3090 AMD Radeon 9200, 4850 CF, 6950@70, 6870 CF, 7850 CF, R9 390, R9 Nano, Vega 64, RX 6800 XT
Lista beg. priser GPUer ESD for dummies

Permalänk
Avstängd

Jag tycker att det precis som med alla andra språk är enkelt att man tar till externa bibliotek som underhålls av någon inofficiell. När du prövar dig fram bör du alltid försöka lösa problemet med Pythons standardbibliotek. Det är mitt tips!

Permalänk

För andra som råkar hitta den här tråden så finns det nu en interaktiv kurs på svenska på https://pythonlabbet.se. Lite åt det matematiska hållet.

Permalänk
Medlem

Om du har frågor gällande python kod så posta här så hjälper jag gärna dig lösa diverse problem.

W3Schools är annars schyst och enkelt.

En bra start är t.ex modifiera redan skriven kod, Kodi har ett stort community med mycket python kod bl.a.

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem

Du behöver ju något att göra med din kod, vilket jag kan tycka är lite besvärligt, vad ska jag programmera egentligen. Om du står ut med matte så är det det egentligen det simplaste du kan programmera om du är en nybörjare. Jag kan rekommendera Project Euler som har en massa problem av varierande svårighetsgrad.

Permalänk
Medlem
Skrivet av M89:

Om du har frågor gällande python kod så posta här så hjälper jag gärna dig lösa diverse problem.

W3Schools är annars schyst och enkelt.

En bra start är t.ex modifiera redan skriven kod, Kodi har ett stort community med mycket python kod bl.a.

Hej, hittade denna tråd då jag har kört fast och du erbjöd iaf. TS hjälp, om du eller någon annan kan hjälpa mig så är jag tacksam.

Jag är själv helt 0 på programmering och har fått hjälp att skriva denna kod, märkligt nog så får författaren den att fungera på Mac, Linux och Win 11, men jag får inte till det på win 10 eller win 11 och vi kommer ingenstans med vad som kan vara fel.

Om någon kan hjälpa mig då jag antar att felet är hos mig då han får till det men inte jag, jag har python, anaconda och kör det i spyder.

När det körs ange följande input:
Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff 3
Önskad summa (t.ex. 200.0) ? 200
Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? 0.01
Tryck 1 för text-fil och 2 för CSV-fil: 1

Kod:

[import requests
import re
import json
import itertools
import os
import time

from concurrent.futures import ProcessPoolExecutor

def process_chunk(start, end, rowlist, pmin, pmax):

try:
sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end)
except:
print(f"Itertools failed at {start} - {end}")
quit()
valid_combinations = []
tss = 0
for comb in sub_gen:
tss += 1
try:
indices, values = zip(*comb)
except:
print("zip failed, with comb of:",len(comb))
quit()
s = sum(values)
if pmin <= s <= pmax:
valid_combinations.append(indices + (s,))
return valid_combinations, tss

def main():

max_num_of_workers = 8 # ändras för att ändra antalet parallella processer

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()

pgoal = float(input("Önskad summa (t.ex. 200.0) ? "))
pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? "))
pmin = pgoal - pdev
pmax = pgoal + pdev

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"]
outfile = outfiles[mde]

try:
response = requests.get(url)
html_content = response.text

except:
print(f"Kan inte komma hämta data från: {url}. Avbryter.")
quit()

pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});'

try:
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))

except:
print(f"Kunde inte extrahera data")
quit()

signlists = []
rowlist = []

if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader
draws=json_obj["Draws"]["entities"]

try:
drawsKey = list(dict.keys(draws))[0]
except IndexError:
print("Inte möjligt att hämta Fullträff-omgång. Avbryter.")
quit()

omg=draws[drawsKey]["drawNumber"] # hämta omgångsnr
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

numAlts=3
if gamemode==3: # Fullträff
numAlts=6

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,numAlts):
if game[i] == None:
print ("None-error",gameDict[gameKey])
quit()
f = 100.0/float(game[i]) # konvertera oddset 100/o
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<numAlts:
fgame.append(newo)

if gamemode==3:
rowlist.append(fgame)

else:
for ix,perc in enumerate(fgame):
signlists[ix].append(perc)

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
valid_combinations = []

default_workers = os.cpu_count()
print(f"Default number of workers: {default_workers}")

chunk_size = 500000 # You can adjust the chunk size
total_size = 6 ** 13 # 6^13 combinations
chunks = [(i, min(i + chunk_size, total_size)) for i in range(0, total_size, chunk_size)]

print ("Length of chunks:",len(chunks))

start_time = time.time()

with ProcessPoolExecutor(max_workers=max_num_of_workers) as executor:
print(f"Executor is using {executor._max_workers} workers")

for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)):

tsts += chunk_tsts
valid_combinations.extend(chunk_result)
cn += len(chunk_result)

if tsts % 1000000 == 0:
print(int(tsts / 1000000), "million iterations,", cn, "rows found")

if cn >= maxcoupons:
break

end_time = time.time()
taken_time = round(end_time - start_time,2)
ave_time = round(taken_time/(tsts/1000000),4)
print(f"Time taken: {taken_time} seconds")
print(f"Avg. time: {ave_time} sec/million iterations")

with open(outfile, 'w') as f:

f.write(f"Fulltraff,Omg={omg}\n") # första raden

for ix,comb in enumerate(valid_combinations):

if mde == 1 and ix<maxcoupons: # 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 and ix<maxcoupons: # CSV-läge
f.write(','.join(str(nm) for nm in comb)+"\n")

cn=min(cn,maxcoupons)

print(f"{outfile} skapad med {cn} rader!")

if __name__ == '__main__':
main()]

Permalänk
Medlem

@jarker posta koden med [code] taggar så blir det lättare att läsa den här på forumet.

Btw vad får du för felkod när du kör scriptet?

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av M89:

@jarker posta koden med [code] taggar så blir det lättare att läsa den här på forumet.

Btw vad får du för felkod när du kör scriptet?

Jo, alltså, det är just det som är det svåra, jag får inget felmeddelande, det fryser bara hos mig, jag får inte ut någonting utan tvingas avbryta då jag inte kan skriva något, t.ex. för att köra scriptet på nytt.

Författaren då som lyckas köra detta, får en textfil med 10000 rader i, så här snabbt går det att få ut de för honom:

Time taken: 56.21 seconds
Avg. time: 0.1993 sec/million iterations
tips.txt skapad med 10000 rader!

Men vi kan inte komma på varför det fryser hos mig, jag har visseligen bara 16Gb ram men en I7 av årets modell så det borde ju rimligen inte vara några problem, jag har även testat på min äldre burk, även den en I7 men win 10 och 32Gb ram men får inte ut någon fil där heller.

Hoppas det är något enkelt problem då det är rätt frustrerande.

Permalänk
Medlem

Relevant till just programmering och debugging är att kapa ner koden och se om alla olika delar funkar som dom ska och försöka isolera problemet.

Permalänk
Medlem
Skrivet av Terzom:

Relevant till just programmering och debugging är att kapa ner koden och se om alla olika delar funkar som dom ska och försöka isolera problemet.

Ja, det blir ju inte så lätt när man inte kan någonting om sånt här, det lär ju bli fler error än det borde, antar att det inte bara är att ta bort några rader på måfå, de hänger säkert ihop på något sätt.

Permalänk
Medlem
Skrivet av jarker:

Ja, det blir ju inte så lätt när man inte kan någonting om sånt här, det lär ju bli fler error än det borde, antar att det inte bara är att ta bort några rader på måfå, de hänger säkert ihop på något sätt.

Det är omöjligt för oss att tyda koden då den saknar indenteringen vilket är väldigt i python. Ifall du vill ha hjälp lägg upp koden så här https://www.sweclockers.com/forum/trad/1647458-sa-har-lagger-...

Permalänk
Medlem
Skrivet av swesen:

Det är omöjligt för oss att tyda koden då den saknar indenteringen vilket är väldigt i python. Ifall du vill ha hjälp lägg upp koden så här https://www.sweclockers.com/forum/trad/1647458-sa-har-lagger-...

Åh tack för länken, då gör vi ett nytt försök, vore intressant att höra vad som kan vara fel, jag har andra koder som fungerar men just denna skapar ingen fil, och följande värden ska anges:

När det körs ange följande input:
Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff 3
Önskad summa (t.ex. 200.0) ? 200
Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? 0.01
Tryck 1 för text-fil och 2 för CSV-fil: 1

import requests import re import json import itertools from concurrent.futures import ProcessPoolExecutor from pprint import pprint def process_chunk(start, end, rowlist, pmin, pmax): sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end) valid_combinations = [] tss = 0 for comb in sub_gen: tss += 1 indices, values = zip(*comb) s = sum(values) if pmin <= s <= pmax: valid_combinations.append(indices + (s,)) return valid_combinations, tss def main(): 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() pgoal = float(input("Önskad summa (t.ex. 200.0) ? ")) pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? ")) pmin = pgoal - pdev pmax = pgoal + pdev 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"] outfile = outfiles[mde] try: response = requests.get(url) html_content = response.text except: print(f"Kan inte komma hämta data från: {url}. Avbryter.") quit() pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});' try: 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)) except: print(f"Kunde inte extrahera data") quit() signlists = [] rowlist = [] if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader draws=json_obj["Draws"]["entities"] try: drawsKey = list(dict.keys(draws))[0] except IndexError: print("Inte möjligt att hämta Fullträff-omgång. Avbryter.") quit() omg=draws[drawsKey]["drawNumber"] # hämta omgångsnr 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 numAlts=3 if gamemode==3: # Fullträff numAlts=6 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,numAlts): if game[i] == None: print ("None-error",gameDict[gameKey]) quit() f = 100.0/float(game[i]) # konvertera oddset 100/o 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<numAlts: fgame.append(newo) if gamemode==3: rowlist.append(fgame) else: for ix,perc in enumerate(fgame): signlists[ix].append(perc) 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 valid_combinations = [] chunk_size = 100000 # You can adjust the chunk size total_size = 6 ** 13 # 6^13 combinations chunks = [(i, min(i + chunk_size, total_size)) for i in range(0, total_size, chunk_size)] print ("Lengt of chunks",len(chunks)) with ProcessPoolExecutor() as executor: for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)): tsts += chunk_tsts valid_combinations.extend(chunk_result) cn += len(chunk_result) if tsts % 1000000 == 0: print(int(tsts / 1000000), "million iterations,", cn, "rows found") if cn >= maxcoupons: break with open(outfile, 'w') as f: f.write(f"Fulltraff,Omg={omg}\n") # första raden for ix,comb in enumerate(valid_combinations): if mde == 1 and ix<maxcoupons: # 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 and ix<maxcoupons: # CSV-läge f.write(','.join(str(nm) for nm in comb)+"\n") cn=min(cn,maxcoupons) print(f"{outfile} skapad med {cn} rader!") if __name__ == '__main__': main()

Permalänk
Medlem

Den stannar för att json_obj är tom på värden.

{'Module': {'engine': 'fulltraff'}, 'Draws': {'ids': [], 'entities': {}, 'relatedDraws': {}, 'loaded': {'fulltraff': '2023-09-09T15:42:46.291Z'}, 'subscriptions': {}, 'requests': {}}, 'BetEvents': {}, 'SportEvents': {}, 'Leagues': {}, 'Sports': {}, 'Participants': {}, 'Countries': {}, 'EventTypeStatistic': {}, 'Funds': {'ids': [], 'entities': {}}}

Vad jag kan se så är detta responsen den får ifrån url:en:

_svs.tipsen.data.preloadedState={"Module":{"engine":"fulltraff"},"Draws":{"ids":[],"entities":{},"relatedDraws":{},"loaded":{"fulltraff":"2023-09-09T15:44:25.056Z"},"subscriptions":{},"requests":{}},"BetEvents":{},"SportEvents":{},"Leagues":{},"Sports":{},"Participants":{},"Countries":{},"EventTypeStatistic":{},"Funds":{"ids":[],"entities":{}}};

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av M89:

Den stannar för att json_obj är tom på värden.

{'Module': {'engine': 'fulltraff'}, 'Draws': {'ids': [], 'entities': {}, 'relatedDraws': {}, 'loaded': {'fulltraff': '2023-09-09T15:42:46.291Z'}, 'subscriptions': {}, 'requests': {}}, 'BetEvents': {}, 'SportEvents': {}, 'Leagues': {}, 'Sports': {}, 'Participants': {}, 'Countries': {}, 'EventTypeStatistic': {}, 'Funds': {'ids': [], 'entities': {}}}

Vad jag kan se så är detta responsen den får ifrån url:en:

_svs.tipsen.data.preloadedState={"Module":{"engine":"fulltraff"},"Draws":{"ids":[],"entities":{},"relatedDraws":{},"loaded":{"fulltraff":"2023-09-09T15:44:25.056Z"},"subscriptions":{},"requests":{}},"BetEvents":{},"SportEvents":{},"Leagues":{},"Sports":{},"Participants":{},"Countries":{},"EventTypeStatistic":{},"Funds":{"ids":[],"entities":{}}};

Åh, nej, det är ju efter spelstopp nu, hmm, suck.

Men om du kan ändra Url för Fullträff till följande kanske du får värdena :

https://spela.svenskaspel.se/fulltraff/resultat

Permalänk
Medlem
Skrivet av jarker:

Åh, nej, det är ju efter spelstopp nu, hmm, suck.

Men om du kan ändra Url för Fullträff till följande kanske du får värdena :

https://spela.svenskaspel.se/fulltraff/resultat

För resultatet stämmer inte regexen, då får vi invänta nästa omgång.

EDIT:

Efter en snabb kik i din kod hade jag nog kollat närmare på executern och lagt till en try.

try: with ProcessPoolExecutor() as executor: for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)): tsts += chunk_tsts valid_combinations.extend(chunk_result) cn += len(chunk_result) if tsts % 1000000 == 0: print(int(tsts / 1000000), "million iterations,", cn, "rows found") if cn >= maxcoupons: break except Exception as e: print(f'error: {e}')

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av M89:

För resultatet stämmer inte regexen, då får vi invänta nästa omgång.

EDIT:

Efter en snabb kik i din kod hade jag nog kollat närmare på executern och lagt till en try.

try: with ProcessPoolExecutor() as executor: for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)): tsts += chunk_tsts valid_combinations.extend(chunk_result) cn += len(chunk_result) if tsts % 1000000 == 0: print(int(tsts / 1000000), "million iterations,", cn, "rows found") if cn >= maxcoupons: break except Exception as e: print(f'error: {e}')

Provade lite olika ställen att både lägga till den och ersätta där jag trodde den skulle vara men får bara lite olika felmeddelanden.

Däremot borde Europatipset fungera, dvs "2" på första frågan, då det är spelstopp imorgon men den krånglar också även fast jag har en fungerande variant för den sedan förut.

Permalänk
Medlem
Skrivet av jarker:

Provade lite olika ställen att både lägga till den och ersätta där jag trodde den skulle vara men får bara lite olika felmeddelanden.

Däremot borde Europatipset fungera, dvs "2" på första frågan, då det är spelstopp imorgon men den krånglar också även fast jag har en fungerande variant för den sedan förut.

Hmm, den kör igenom med nedan kod men jag får inga rader (tips.txt skapad med 0 rader!), måste sätta mig in i logiken. Fanns en indent error i din kod minns dock inte nu vilken rad.

import requests import re import json import itertools from concurrent.futures import ProcessPoolExecutor from pprint import pprint def process_chunk(start, end, rowlist, pmin, pmax): sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end) valid_combinations = [] tss = 0 for comb in sub_gen: tss += 1 indices, values = zip(*comb) s = sum(values) if pmin <= s <= pmax: valid_combinations.append(indices + (s,)) return valid_combinations, tss def main(): gamemode = 2#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() pgoal = 200.0#float(input("Önskad summa (t.ex. 200.0) ? ")) pdev = 0.01#float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? ")) pmin = pgoal - pdev pmax = pgoal + pdev mde = 1#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"] outfile = outfiles[mde] try: response = requests.get(url) html_content = response.text except: print(f"Kan inte komma hämta data från: {url}. Avbryter.") quit() pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});' #print(html_content) try: 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)) except: print(f"Kunde inte extrahera data") quit() signlists = [] rowlist = [] if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader draws=json_obj["Draws"]["entities"] print(json_obj) try: drawsKey = list(dict.keys(draws))[0] except IndexError: print("Inte möjligt att hämta Fullträff-omgång. Avbryter.") quit() omg=draws[drawsKey]["drawNumber"] # hämta omgångsnr 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 numAlts=3 if gamemode==3: # Fullträff numAlts=6 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,numAlts): if game[i] == None: print ("None-error",gameDict[gameKey]) quit() f = 100.0/float(game[i]) # konvertera oddset 100/o 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<numAlts: fgame.append(newo) if gamemode==3: rowlist.append(fgame) else: for ix,perc in enumerate(fgame): signlists[ix].append(perc) 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 valid_combinations = [] chunk_size = 100000 # You can adjust the chunk size total_size = 6 ** 13 # 6^13 combinations chunks = [(i, min(i + chunk_size, total_size)) for i in range(0, total_size, chunk_size)] print ("Lengt of chunks",len(chunks)) try: with ProcessPoolExecutor() as executor: for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)): tsts += chunk_tsts valid_combinations.extend(chunk_result) cn += len(chunk_result) if tsts % 1000000 == 0: print(int(tsts / 1000000), "million iterations,", cn, "rows found") if cn >= maxcoupons: break except Exception as e: print(f'error: {e}') with open(outfile, 'w') as f: f.write(f"Fulltraff,Omg={omg}\n") # första raden for ix,comb in enumerate(valid_combinations): if mde == 1 and ix<maxcoupons: # 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 and ix<maxcoupons: # CSV-läge f.write(','.join(str(nm) for nm in comb)+"\n") cn=min(cn,maxcoupons) print(f"{outfile} skapad med {cn} rader!") if __name__ == '__main__': main()

Dold text
Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av M89:

Hmm, den kör igenom med nedan kod men jag får inga rader (tips.txt skapad med 0 rader!), måste sätta mig in i logiken. Fanns en indent error i din kod minns dock inte nu vilken rad.

import requests import re import json import itertools from concurrent.futures import ProcessPoolExecutor from pprint import pprint def process_chunk(start, end, rowlist, pmin, pmax): sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end) valid_combinations = [] tss = 0 for comb in sub_gen: tss += 1 indices, values = zip(*comb) s = sum(values) if pmin <= s <= pmax: valid_combinations.append(indices + (s,)) return valid_combinations, tss def main(): gamemode = 2#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() pgoal = 200.0#float(input("Önskad summa (t.ex. 200.0) ? ")) pdev = 0.01#float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? ")) pmin = pgoal - pdev pmax = pgoal + pdev mde = 1#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"] outfile = outfiles[mde] try: response = requests.get(url) html_content = response.text except: print(f"Kan inte komma hämta data från: {url}. Avbryter.") quit() pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});' #print(html_content) try: 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)) except: print(f"Kunde inte extrahera data") quit() signlists = [] rowlist = [] if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader draws=json_obj["Draws"]["entities"] print(json_obj) try: drawsKey = list(dict.keys(draws))[0] except IndexError: print("Inte möjligt att hämta Fullträff-omgång. Avbryter.") quit() omg=draws[drawsKey]["drawNumber"] # hämta omgångsnr 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 numAlts=3 if gamemode==3: # Fullträff numAlts=6 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,numAlts): if game[i] == None: print ("None-error",gameDict[gameKey]) quit() f = 100.0/float(game[i]) # konvertera oddset 100/o 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<numAlts: fgame.append(newo) if gamemode==3: rowlist.append(fgame) else: for ix,perc in enumerate(fgame): signlists[ix].append(perc) 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 valid_combinations = [] chunk_size = 100000 # You can adjust the chunk size total_size = 6 ** 13 # 6^13 combinations chunks = [(i, min(i + chunk_size, total_size)) for i in range(0, total_size, chunk_size)] print ("Lengt of chunks",len(chunks)) try: with ProcessPoolExecutor() as executor: for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)): tsts += chunk_tsts valid_combinations.extend(chunk_result) cn += len(chunk_result) if tsts % 1000000 == 0: print(int(tsts / 1000000), "million iterations,", cn, "rows found") if cn >= maxcoupons: break except Exception as e: print(f'error: {e}') with open(outfile, 'w') as f: f.write(f"Fulltraff,Omg={omg}\n") # första raden for ix,comb in enumerate(valid_combinations): if mde == 1 and ix<maxcoupons: # 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 and ix<maxcoupons: # CSV-läge f.write(','.join(str(nm) for nm in comb)+"\n") cn=min(cn,maxcoupons) print(f"{outfile} skapad med {cn} rader!") if __name__ == '__main__': main()

Dold text

Nu vet jag inte riktigt vilken du kör, men om du testar Europatipset så sätt högre summa, t.ex. 300 och tolerans 10 istället då det är högre värden på den spelformen, osäkert om det blir så många rader annars.

Jag testade din kod men fick inte välja vilket spel, därför jag nämnde ovanstående

Permalänk
Medlem
Skrivet av jarker:

Åh tack för länken, då gör vi ett nytt försök, vore intressant att höra vad som kan vara fel, jag har andra koder som fungerar men just denna skapar ingen fil, och följande värden ska anges:

När det körs ange följande input:
Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff 3
Önskad summa (t.ex. 200.0) ? 200
Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? 0.01
Tryck 1 för text-fil och 2 för CSV-fil: 1

import requests import re import json import itertools from concurrent.futures import ProcessPoolExecutor from pprint import pprint def process_chunk(start, end, rowlist, pmin, pmax): sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end) valid_combinations = [] tss = 0 for comb in sub_gen: tss += 1 indices, values = zip(*comb) s = sum(values) if pmin <= s <= pmax: valid_combinations.append(indices + (s,)) return valid_combinations, tss def main(): 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() pgoal = float(input("Önskad summa (t.ex. 200.0) ? ")) pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? ")) pmin = pgoal - pdev pmax = pgoal + pdev 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"] outfile = outfiles[mde] try: response = requests.get(url) html_content = response.text except: print(f"Kan inte komma hämta data från: {url}. Avbryter.") quit() pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});' try: 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)) except: print(f"Kunde inte extrahera data") quit() signlists = [] rowlist = [] if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader draws=json_obj["Draws"]["entities"] try: drawsKey = list(dict.keys(draws))[0] except IndexError: print("Inte möjligt att hämta Fullträff-omgång. Avbryter.") quit() omg=draws[drawsKey]["drawNumber"] # hämta omgångsnr 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 numAlts=3 if gamemode==3: # Fullträff numAlts=6 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,numAlts): if game[i] == None: print ("None-error",gameDict[gameKey]) quit() f = 100.0/float(game[i]) # konvertera oddset 100/o 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<numAlts: fgame.append(newo) if gamemode==3: rowlist.append(fgame) else: for ix,perc in enumerate(fgame): signlists[ix].append(perc) 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 valid_combinations = [] chunk_size = 100000 # You can adjust the chunk size total_size = 6 ** 13 # 6^13 combinations chunks = [(i, min(i + chunk_size, total_size)) for i in range(0, total_size, chunk_size)] print ("Lengt of chunks",len(chunks)) with ProcessPoolExecutor() as executor: for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)): tsts += chunk_tsts valid_combinations.extend(chunk_result) cn += len(chunk_result) if tsts % 1000000 == 0: print(int(tsts / 1000000), "million iterations,", cn, "rows found") if cn >= maxcoupons: break with open(outfile, 'w') as f: f.write(f"Fulltraff,Omg={omg}\n") # första raden for ix,comb in enumerate(valid_combinations): if mde == 1 and ix<maxcoupons: # 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 and ix<maxcoupons: # CSV-läge f.write(','.join(str(nm) for nm in comb)+"\n") cn=min(cn,maxcoupons) print(f"{outfile} skapad med {cn} rader!") if __name__ == '__main__': main()

Hade gjort följande:

  1. Skapa funktioner åt alla dina gamemodes.

  2. Ändra alla namn på allting till snake_case och utan förkortningar. Detta gör programmet mer läsbart. Dvs ändra comb till combinations, gameKey till game_key, outfile till output_file.

  3. Ta bort alla try/except och lös vad det nu är för problem som har gjort att dessa behövdes. Om du prompt måste ha try/except av någon anledning så specificera vilken typ av exception du försöker fånga och lägg bara en rad kod i try-blocket. Annars kan det hända att du fångar andra exceptions än vad du hade tänkt dig. Specificera alltid en exception-typ (dvs använd aldrig bara except:), annars fångar du t.ex KeyboardInterrupt, MemoryError, SystemExit och diverse annat.

  4. Gör programmet singeltrådat.

  5. Skriv om allt itertools-tjafs till något mer läsbart, 99 gånger av 100 går detta att göra med t.ex vanliga for-loopar, list comprehensions etc.

Permalänk
Medlem
Skrivet av jarker:

Nu vet jag inte riktigt vilken du kör, men om du testar Europatipset så sätt högre summa, t.ex. 300 och tolerans 10 istället då det är högre värden på den spelformen, osäkert om det blir så många rader annars.

Jag testade din kod men fick inte välja vilket spel, därför jag nämnde ovanstående

Jag satte fasta värden så jag slipper fylla i varje gång, men jag testar med 300.

Som Olle skriver så finns det förbättringspotential i din kod.

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av Olle3:

Hade gjort följande:

  1. Skapa funktioner åt alla dina gamemodes.

  2. Ändra alla namn på allting till snake_case och utan förkortningar. Detta gör programmet mer läsbart. Dvs ändra comb till combinations, gameKey till game_key, outfile till output_file.

  3. Ta bort alla try/except och lös vad det nu är för problem som har gjort att dessa behövdes. Om du prompt måste ha try/except av någon anledning så specificera vilken typ av exception du försöker fånga och lägg bara en rad kod i try-blocket. Annars kan det hända att du fångar andra exceptions än vad du hade tänkt dig. Specificera alltid en exception-typ (dvs använd aldrig bara except:), annars fångar du t.ex KeyboardInterrupt, MemoryError, SystemExit och diverse annat.

  4. Gör programmet singeltrådat.

  5. Skriv om allt itertools-tjafs till något mer läsbart, 99 gånger av 100 går detta att göra med t.ex vanliga for-loopar, list comprehensions etc.

Jo, alltså jag har redan en singeltrådad variant, bara det att den tar nästan 3 timmar att köra igenom de 13 miljarder rader som det är, därför skrev han denna som nästan går 10 gånger snabbare men att det är något i den som gör att jag inte kan få igång den, men lyckas inte klura ut vad.

Permalänk
Medlem
Skrivet av M89:

Hmm, den kör igenom med nedan kod men jag får inga rader (tips.txt skapad med 0 rader!), måste sätta mig in i logiken. Fanns en indent error i din kod minns dock inte nu vilken rad.

import requests import re import json import itertools from concurrent.futures import ProcessPoolExecutor from pprint import pprint def process_chunk(start, end, rowlist, pmin, pmax): sub_gen = itertools.islice(itertools.product(*[enumerate(row) for row in rowlist]), start, end) valid_combinations = [] tss = 0 for comb in sub_gen: tss += 1 indices, values = zip(*comb) s = sum(values) if pmin <= s <= pmax: valid_combinations.append(indices + (s,)) return valid_combinations, tss def main(): gamemode = 2#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() pgoal = 200.0#float(input("Önskad summa (t.ex. 200.0) ? ")) pdev = 0.01#float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? ")) pmin = pgoal - pdev pmax = pgoal + pdev mde = 1#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"] outfile = outfiles[mde] try: response = requests.get(url) html_content = response.text except: print(f"Kan inte komma hämta data från: {url}. Avbryter.") quit() pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});' #print(html_content) try: 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)) except: print(f"Kunde inte extrahera data") quit() signlists = [] rowlist = [] if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader draws=json_obj["Draws"]["entities"] print(json_obj) try: drawsKey = list(dict.keys(draws))[0] except IndexError: print("Inte möjligt att hämta Fullträff-omgång. Avbryter.") quit() omg=draws[drawsKey]["drawNumber"] # hämta omgångsnr 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 numAlts=3 if gamemode==3: # Fullträff numAlts=6 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,numAlts): if game[i] == None: print ("None-error",gameDict[gameKey]) quit() f = 100.0/float(game[i]) # konvertera oddset 100/o 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<numAlts: fgame.append(newo) if gamemode==3: rowlist.append(fgame) else: for ix,perc in enumerate(fgame): signlists[ix].append(perc) 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 valid_combinations = [] chunk_size = 100000 # You can adjust the chunk size total_size = 6 ** 13 # 6^13 combinations chunks = [(i, min(i + chunk_size, total_size)) for i in range(0, total_size, chunk_size)] print ("Lengt of chunks",len(chunks)) try: with ProcessPoolExecutor() as executor: for chunk_result, chunk_tsts in executor.map(process_chunk, [start for start, end in chunks], [end for start, end in chunks], itertools.repeat(rowlist), itertools.repeat(pmin), itertools.repeat(pmax)): tsts += chunk_tsts valid_combinations.extend(chunk_result) cn += len(chunk_result) if tsts % 1000000 == 0: print(int(tsts / 1000000), "million iterations,", cn, "rows found") if cn >= maxcoupons: break except Exception as e: print(f'error: {e}') with open(outfile, 'w') as f: f.write(f"Fulltraff,Omg={omg}\n") # första raden for ix,comb in enumerate(valid_combinations): if mde == 1 and ix<maxcoupons: # 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 and ix<maxcoupons: # CSV-läge f.write(','.join(str(nm) for nm in comb)+"\n") cn=min(cn,maxcoupons) print(f"{outfile} skapad med {cn} rader!") if __name__ == '__main__': main()

Dold text

Körde med 500.0 för variabeln pgoal och då hittade den 77 rader, verkar fungera.

Istället för input kan du ändra till fasta värden för gamemode, pgoal, pdev och mde så som jag gjort nedan:

gamemode = 2 #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() pgoal = 500.0 #float(input("Önskad summa (t.ex. 200.0) ? ")) pdev = 0.01 #float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? ")) pmin = pgoal - pdev pmax = pgoal + pdev mde = 1 #int(input("Tryck 1 för text-fil och 2 för CSV-fil: "))

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av jarker:

Jo, alltså jag har redan en singeltrådad variant, bara det att den tar nästan 3 timmar att köra igenom de 13 miljarder rader som det är, därför skrev han denna som nästan går 10 gånger snabbare men att det är något i den som gör att jag inte kan få igång den, men lyckas inte klura ut vad.

Vad bra, gör övriga steg på den singeltrådade varianten då, och sen starta den, vänta 10 sekunder, tryck ctrl+c och se på stack tracet vad den håller på med. Eftersom den vid det laget borde ha börjat med sin megauppgift (möjligen en av flera…) kommer vi då se vad som tar så lång tid och kunna skriva om det till något snabbare.

Skriv resultatet i tråden så hjälper vi dig göra den snabbare

Permalänk
Medlem
Skrivet av Olle3:

Vad bra, gör övriga steg på den singeltrådade varianten då, och sen starta den, vänta 10 sekunder, tryck ctrl+c och se på stack tracet vad den håller på med. Eftersom den vid det laget borde ha börjat med sin megauppgift (möjligen en av flera…) kommer vi då se vad som tar så lång tid och kunna skriva om det till något snabbare.

Skriv resultatet i tråden så hjälper vi dig göra den snabbare

Har du förslag på någon sida som kan förklara vad alla olika ord betyder, känns ju rätt övermäktigt att gissa sig fram när man inte har en susning om
vad allt betyder.

Permalänk
Medlem
Skrivet av jarker:

Har du förslag på någon sida som kan förklara vad alla olika ord betyder, känns ju rätt övermäktigt att gissa sig fram när man inte har en susning om
vad allt betyder.

ChatGPT