Vinnaren i pepparkakshustävlingen!
2022-10-06, 12:51
  #2101
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Methos
Totalt onödigt exempel men här har du en klass med en klassvariabel som är satt som dict()
Kod:
>>> class My_dict:
...     dic = dict()

>>> My_dict.dic
{}

>>> my_dic = My_dict()
>>> my_dic.dic['f']='hej'
>>> my_dic.dic
{'f': 'hej'}
Testade just den här lösningen, och den fungerade mycket bra. Mycket bättre körtider än att ha en dict som hela tiden återställdes mellan iterationerna.

Får hoppas att läraren godkänner den lilla gliringen.

Citat:
Ursprungligen postat av Enterprise
En "fullösning" som jag ibland använt när jag kodar JS är att skapa en dict (eller object som det är i JS) som heter globals och som innehåller alla globala variabler (det är således förbud på att använda globala variabler som inte ligger under globals). Om jag då vill åt globals.winLength så är det ingen risk att blanda ihop den med lokala variabeln winLength.
Det var också en fantastisk lösning när man vill vara lite bråkig tillbaka.
Ska lägga den på minnet
__________________
Senast redigerad av Bonnatorp 2022-10-06 kl. 13:14.
Citera
2022-10-06, 13:24
  #2102
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Testade just den här lösningen, och den fungerade mycket bra. Mycket bättre körtider en att ha en dict som hela tiden återställdes mellan iterationerna.

Får hoppas att läraren godkänner den lilla gliringen.


Det var också en fantastisk lösning när man vill vara lite bråkig tillbaka.
Ska lägga den på minnet

Men du använde väl inte mina namn? Jisses.

Hmm vad är det med lektorer och komplicera saker och ting. Vad skall du göra i den uppgiften du skickade mig?
Det ser ut som att du skall öva Fib.

En sabla komplicerad kod ni har gjort för något som kan lösas med EN while loop:

>>> while len(g)<10:
... if len(g)==1:
... g.append(1)
... continue
... g.append(g[-1]+g[-1-1])
...
>>> g
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>>

Vad ska du har dicten till?
Sedan kan du göra en wrap av din innerfunktion och tidsmäta den.
Men jag har absolut ingen aning om vad fasiken ni vill göra med den där långa och otympliga koden du skickade mig.
För som du ser behöver du inte spara redan kalkylerade värden i en dict. Du behöver heller inte hämta dessa värden om och om och om och om igen.

Men är kursmålet att du skall använda dict så gör et, men det ser mer ut som att du inte skall använda globala variabler. Vilket jag förvisso gör i detta exempel, men det för att jag har en while loop.

En lite mer lämplig funktion utan globala saker:

Kod:
def calc_fib():
    g=[1]
    if len(g)==1: g.append(1)
    while len(g) <20: g.append(g[-1]+g[-1-1])
    return g

f = calc_fib()
print(f)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
Citera
2022-10-06, 13:45
  #2103
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Methos
Men du använde väl inte mina namn? Jisses.

Hmm vad är det med lektorer och komplicera saker och ting. Vad skall du göra i den uppgiften du skickade mig?
Det ser ut som att du skall öva Fib.

En sabla komplicerad kod ni har gjort för något som kan lösas med EN while loop:

>>> while len(g)<10:
... if len(g)==1:
... g.append(1)
... continue
... g.append(g[-1]+g[-1-1])
...
>>> g
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>>

Vad ska du har dicten till?
Sedan kan du göra en wrap av din innerfunktion och tidsmäta den.
Men jag har absolut ingen aning om vad fasiken ni vill göra med den där långa och otympliga koden du skickade mig.
För som du ser behöver du inte spara redan kalkylerade värden i en dict. Du behöver heller inte hämta dessa värden om och om och om och om igen.

Men är kursmålet att du skall använda dict så gör et, men det ser mer ut som att du inte skall använda globala variabler. Vilket jag förvisso gör i detta exempel, men det för att jag har en while loop.

En lite mer lämplig funktion utan globala saker:

Kod:
def calc_fib():
    g=[1]
    if len(g)==1: g.append(1)
    while len(g) <20: g.append(g[-1]+g[-1-1])
    return g

f = calc_fib()
print(f)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
Jo det är just fib.
Efter mycken bryderier har jag kommit fram till att det nog mest är utformat för att det ska vara i princip omöjligt att göra saker på ett bättre och enklare sätt, med visst tvång att läsa kursmaterialet för exakt de verktyg som förväntas.
De som inte programmerat förut (och nitiskt läser precis allt material) säger att det ändå känns typ okej, jag som läst två kurser C# och hobbykodat i python några månader håller på slita håret av mig då det skalar bort så mycket av det jag redan kan.
Plus att jag förmodligen skulle få skäll om jag gjorde på det sätt som laborationen förväntar på en arbetsplats, då det är ineffektivt.

Decoratorn som skickades är gjord enligt pseudokod, jag är halvsäker på att den i princip inte går ändra något alls i. Och den tvingar de kallade räknefunktionerna att köra allting baklänges.

Den andra skickade funktionen måste göra det rekursivt. Hur många gånger den ska göra det är ospecificerat, därför hade jag önskat att den hade kunnat göra det en enda gång, och lagra alla rekursionsvärden i en dict som inte återställs nästa gång funktionen kallas med n-1.

Visst, den fungerar redan med en nestad funktion och en dict i den yttre funktionen, men det känns inte bra när dicten återställs lika många gånger som antalet fibonaccital som ska räknas.

Och nej, jag använde självklart inte dina namn.
Det vore oklokt.
Väntar på bud huruvida man får göra så dock.
__________________
Senast redigerad av Bonnatorp 2022-10-06 kl. 13:50.
Citera
2022-10-06, 14:46
  #2104
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Jo det är just fib.
Efter mycken bryderier har jag kommit fram till att det nog mest är utformat för att det ska vara i princip omöjligt att göra saker på ett bättre och enklare sätt, med visst tvång att läsa kursmaterialet för exakt de verktyg som förväntas.
De som inte programmerat förut (och nitiskt läser precis allt material) säger att det ändå känns typ okej, jag som läst två kurser C# och hobbykodat i python några månader håller på slita håret av mig då det skalar bort så mycket av det jag redan kan.
Plus att jag förmodligen skulle få skäll om jag gjorde på det sätt som laborationen förväntar på en arbetsplats, då det är ineffektivt.

Decoratorn som skickades är gjord enligt pseudokod, jag är halvsäker på att den i princip inte går ändra något alls i. Och den tvingar de kallade räknefunktionerna att köra allting baklänges.

Den andra skickade funktionen måste göra det rekursivt. Hur många gånger den ska göra det är ospecificerat, därför hade jag önskat att den hade kunnat göra det en enda gång, och lagra alla rekursionsvärden i en dict som inte återställs nästa gång funktionen kallas med n-1.

Visst, den fungerar redan med en nestad funktion och en dict i den yttre funktionen, men det känns inte bra när dicten återställs lika många gånger som antalet fibonaccital som ska räknas.

Och nej, jag använde självklart inte dina namn.
Det vore oklokt.
Väntar på bud huruvida man får göra så dock.

Jag hinner tyvärr inte sitta ned och dekryptera den kod du skickade mig. Men går det inte att förenkla den till min calc_fib? Jag förstår fortfarande inte varför ni skall envisas med dict.
Citera
2022-10-06, 14:52
  #2105
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Methos
Jag hinner tyvärr inte sitta ned och dekryptera den kod du skickade mig. Men går det inte att förenkla den till min calc_fib? Jag förstår fortfarande inte varför ni skall envisas med dict.
Nä, den måste vara rekursiv, tyvärr.

Tjae, dict är lämpligt när man vill lagra både nyckel och värde?
Lista skulle gå förstås, men jag har för mig att den fylls på bakifrån rent tekniskt, och då är lista lite olajbans.
Citera
2022-10-06, 15:11
  #2106
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Nä, den måste vara rekursiv, tyvärr.

Tjae, dict är lämpligt när man vill lagra både nyckel och värde?
Lista skulle gå förstås, men jag har för mig att den fylls på bakifrån rent tekniskt, och då är lista lite olajbans.

Förklara för mig hur min funktion inte är rekursiv? Den loopar om och om igen. Du behöver ju inte kopiera in lösning, däremot kan du använda den som möjlig grund. Du kan även göra min funktion mer rekursiv genom att bygga om den lite.

I fib ska ju din lista eller dict fyllas på bakifrån. Hela fib går ju ut på en sådan sak.

det jag gör är att jag först ser till att listan har två ettor i sig. Sedan tar jag sista elementet i listan och adderar den med näst sista elementet och för sedan in svaret i samma lista. Sedan tar jag åter sista elementet i listan osv.

Kod:
g[-1
- sista elementet i listan.
Kod:
g[-1-1
- ta sista elementets index och sedan subtrahera ett från det. Du får då givetvis det näst sista elementet.

Kod:
g.append(g[-1] +g[-1-1]) 
- lägg in svaret som blir inom parentesen i listan.

Jag har dock begränsat längden på listan till 20 element för att inte hänga min dator i värsta loopen.

Du kan ju bygga din egen OrderedDict Då slipper du dessutom obehaget med oordnade element.
För du får enligt instruktion inte använda moduler, så du får inte använda Collections.OrderedDict.
Citera
2022-10-06, 16:49
  #2107
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Methos
Förklara för mig hur min funktion inte är rekursiv?
En rekursiv funktion anropar sig själv?
Vilket din funktion inte gör?

Kod:
def calc_fib(g):
    if len(g)<2: 
        g.append(1)
    else:
        g.append(g[-1]+g[-2])
    if len(g)<10:
        g=calc_fib(g)
    return g

print(calc_fib([]))
Citat:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]


** Process exited - Return Code: 0 **
Press Enter to exit terminal
__________________
Senast redigerad av Enterprise 2022-10-06 kl. 16:57.
Citera
2022-10-11, 14:07
  #2108
Medlem
Bonnatorps avatar
Jag har en text jag kontinuerligt uppdaterar och skriver ut till terminalen för att visa info.
Strängen är redan formaterat enligt önskemål med radbyten och faderullan, och sparad i mystring.

Förut skrev jag ett tecken åt gången, men det blev sådan tearing i högre uppdateringshastigheter att det inte var särskilt snyggt.
Så jag tänkte på hur Vsync jobbar i spel, och sparade allt i en enda sträng som jag printade sedan.
Det går hyggligt fort och bilden som väl dyker upp renderas väldigt bra, men det flimrar en del ändå.
Tiden det tar mellan att terminalen rensas och att den uppdateras verkar variera ganska kraftigt, mellan enstaka till väldigt många millisekunder. Som ett resultat så blinkar bilden mer än önskvärt.

Finns det eventuellt något sätt att snabba på kodstycket jag har nedan? Kanske någon inställning i writefunktionen eller så?
Funderar annars om det går att rensa ett tecken åt gången, och byta ut det med det nya tecknet. Oklart hur snyggt det blir om det inte håller tempot.

Kod:
os.system('clear' if os.name == 'posix' else 'cls')
sys.stdout.write(mystring)

Edit:
Fixade det genom att skriva över varje linje ändå, blev helt perfekt bildkvalité utan något som helst flimmer.
Däremot hänger sig utskriften en stund ganska frekvent, ser precis ut som när riktigt slött minne buffrar ett spel.

Det är visserligen meningen att det här bara ska uppdateras några gånger per sekund, så det gör egentligen inget.
Men det skulle vara kul om det gick åtgärda bara för spexet.
Misstänker att det kan bero på en dict som växer till groteska proportioner.
Finns det något sätt att manuellt radera ett objekt ur minnet inline tillsammans med en return?
__________________
Senast redigerad av Bonnatorp 2022-10-11 kl. 14:54.
Citera
2022-10-11, 20:04
  #2109
Moderator
vhes avatar
Citat:
Ursprungligen postat av Bonnatorp
Misstänker att det kan bero på en dict som växer till groteska proportioner.
Finns det något sätt att manuellt radera ett objekt ur minnet inline tillsammans med en return?

Sluta referera till dem.
Citera
2022-10-14, 19:59
  #2110
Medlem
Bonnatorps avatar
Har fått allt snyggt nu, men det är ett sista problem med estetiken.

Eftersom jag drar tillbaka terminalpekaren härs och tvärs (med ANSI codes) så resulterar det i att när man stannar programmet, eller det kör färdigt själv, så hamnar all ny text mitt i smeten av det som renderats, och det i sig ser fruktansvärt och svårläsligt ut.
Lite som att fylla ut mellanrummet mellan raderna i en bok med olika färger.

Finns det något sätt att kommendera python att göra så att all feltext och dylikt hamnar på en specificerad rad och neråt i terminalen, även efter keyboard interrupt?
Typ X + 1 steg från topp.
Eller skjuta pekaren till en given rad som allra sista åtgärd innan programmet verkligen terminerar.
__________________
Senast redigerad av Bonnatorp 2022-10-14 kl. 20:06.
Citera
2022-10-14, 21:23
  #2111
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Bonnatorp
Har fått allt snyggt nu, men det är ett sista problem med estetiken.

Eftersom jag drar tillbaka terminalpekaren härs och tvärs (med ANSI codes) så resulterar det i att när man stannar programmet, eller det kör färdigt själv, så hamnar all ny text mitt i smeten av det som renderats, och det i sig ser fruktansvärt och svårläsligt ut.
Lite som att fylla ut mellanrummet mellan raderna i en bok med olika färger.

Finns det något sätt att kommendera python att göra så att all feltext och dylikt hamnar på en specificerad rad och neråt i terminalen, även efter keyboard interrupt?
Typ X + 1 steg från topp.
Eller skjuta pekaren till en given rad som allra sista åtgärd innan programmet verkligen terminerar.
Kolla:
https://stackoverflow.com/questions/...12978#27612978
Citera
2022-10-16, 00:00
  #2112
Medlem
https://ibb.co/zQjFP70
håller på med en grej.
jag skulle vilja göra om ABC123 till en variabel, så jag kan ändra variabeln och få den annan del av hemsidan.

https://ibb.co/7JKqdvp
sen har jag försökt med Beautiful Soup att få loss på länken.
till typ en csv fil.

Kod:
from bs4 import BeautifulSoup
import requests
import csv

page_to_scrape = requests.get("https://hemsida.se/sektion/ABC123")
soup = BeautifulSoup(page.content, 'html.parser')
lists = soup.find_all('a', href_="länk??")
någon som kan peka mig i rätt riktning?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback