Gå till innehåll

Imfromsweden har fått en dagbok


Imfromsweden

Recommended Posts

  • Svars 3k
  • Created
  • Senaste svar

Top Posters In This Topic

Tar gärna svar på det här själv om du sitter inne på informationen. :)

 

Ja, kom på att det är för att vi anropar en funktion inte ett attribut. I te.x. sten1.name så skriver den ut namnet eftersom namnet är ett attribut i __init__, men om vi har en till funktion, te.x. test, så måste vi skriva sten1.test() för att det ska fungera (jag glömde ())!

 

Har förresten fått min slut-uppgift i programmeringen :) Den går ut på att man ska skapa en tamaguchi som ska simulera studentlivet. Man får hela tiden välja om den ska plugga, sova, eller festa, och beroende på de tre senaste valen man har gjort kommer den antingen att växa eller minska i storlek. Te.x. "sova","plugga","festa" är en bra kombination och gör så att den växer, medan "festa","plugga","plugga", är en dålig kombination och gör så att den minskar i storlek. Sitter och funderar hur man ska lösa detta på ett begåvat sätt, till råga på allt ska det vara grafiskt så att man ska kunna klicka på skyltarna "fest", "plugga" och "sova", inte behöva skriva in dem.

Länk till kommentar
Dela på andra webbplatser

Ja, kom på att det är för att vi anropar en funktion inte ett attribut. I te.x. sten1.name så skriver den ut namnet eftersom namnet är ett attribut i __init__, men om vi har en till funktion, te.x. test, så måste vi skriva sten1.test() för att det ska fungera (jag glömde ())!

 

Jag tänkte på om PaddyPower(/Poker?) var skattefritt eller inte :mrgreen:

Länk till kommentar
Dela på andra webbplatser

Så jag försöker jobba med min p-uppgift, långsamt som det går. Lyckades få till en lösning med cirka 200 if-satser, men det var tydligen en ful-lösning :) Tillbaka till ritbordet. Nu har jag gjort så att de tre senaste valen alltid sparas i en lista som heter just "lista". Så jag tänkte om man kanske kunde använda något liknande?

 

if lista in listor:

tamaguchin.increasesize

tamaguchin.decreasesize

 

Där listor helt enkelt är en lista där jag matat in massor med olika kombinationer. Dock så vill jag ju att den ska increase i size för vissa kombinationer, och decreasa i storlek för vissa andra. Så jag tänkte att man kunde lägga in lista-kombinationerna i ett uppslagsverk istället, så att varje kombination blir kopplat till ett tal. För då är det ju enkelt sen att säga om talet är x så increasar den, annars decreasar den i storlek. Men till min besvikelse upptäckte jag att man inte ens får lägga in listor i uppslagsverk. Så nu har jag verkligen ingen ide hur jag ska lösa detta huvudbry :oops: Nån som har nåt förslag?

Länk till kommentar
Dela på andra webbplatser

Beroende på hur de där kombinationerna funkar så kanske du kunna lösa det genom att låta varje handling representeras av ett tal och löpande multiplicera de tre senaste talen och förhoppningsvis kunna tilldela dem på ett sätt så att resultatet svarar mot växande och krympande.

 

Säg till exempel att det finns två handlingar, A och B, och regeln är att om A valts två eller noll gånger de tre senaste gångerna så växer din gubbe annars krymper han. Om man då låter A vara -1 och B 1 så kan ju den regeln fås genom att bara titta på om produkten av de tre senaste handlingstalen är positiv eller negativ.

 

Men den idén bygger ju helt på att spelreglerna faktiskt svarar mot matematiska operationer och multiplikation fungerar ju bara om effekten är oberoende av ordning.

Länk till kommentar
Dela på andra webbplatser

Funderade också på det, men tror att det blir svårt, eftersom festa te.x. inte alltid har ett negativt värde. Det är negativt om man gör det innan man pluggar, men positivt om man gör det efter att ha pluggat en del osv.

 

Å andra sidan funderade jag på kanske skapa två listor istället? Vi skapar en lista som heter IncreaseList som innehåller alla kombinationer som gör att tamaguchin växer och vice versa. Sen kör vi:

 

if list in IncreaseList:

tamaguchin.increasesize

 

elif list in DecreaseList:

tamaguchin.increasesize

 

else:

print('It was not very effective')

 

 

 

Tankar? Räknas detta som fulkod att dela upp listan i en positiv och negativ del?

Länk till kommentar
Dela på andra webbplatser

Fattar jag saken rätt så är de enda möjliga utfallen växa eller krympa, utan att det är någon sorts storlek på ändringarna? Det pekar ju rätt kraftigt mot att du ska kunna få ihop det genom att bara titta på en sorts grej, till exempel om en heltalsrepresentation är udda, negativ, nollskild eller nåt sånt.

 

Det rör sig väl bara om 3^3 = 81 kombinationer så lista allihopa och lägg upp på pastebin så kan man kolla efter mönster. Rimligen finns det något ganska enkelt mönster som det är tänkt att du ska hitta och implementera på något smartare vis än en herrans massa if-satser. Har de förbjudit ett lexikon så är det ju med säkerhet så att det inte är tänkt att du ska försöka kringgå det genom att använda två lexikon.

 

En första grej att kolla på är ju om ABC = CBA = BCA, alltså att ordning inte spelar roll.

Länk till kommentar
Dela på andra webbplatser

Detta är uppgiften:

 

2jc0.png

 

Så jag har inte blivit förbjuden att använda lexikon, det enkelt fungerar inte i python att lägga in listor i lexikon. Och som jag förstår det spelar ordningen roll, alltså ABC != CBA. Därför tänkte jag kanske lägga in en lista med alla listor som gör att den växer, och en annan lista med alla listor som gör att den minskar i storlek och sedan matcha vår aktuella lista mot dessa listor med listor i sig, men är som sagt öppen för andra förslag, men misstänker att det här med att ge varje möjligt val en nummer-representation blir väldigt krångligt.

Länk till kommentar
Dela på andra webbplatser

Nej, då verkar det inte vara någon poäng att ge sig på några mattetrick.

 

Är problemet alltså att du har en datastruktur av typen lista och inte kan hysta in den i en datastruktur av typen lexikon eftersom lexikon inte accepterar? Kan du inte bara göra om handlingslistan till en sträng, eller något annat som ett lexikon kan tänka sig att hantera, och på så sätt få in det.

 

Alternativt rekommenderar jag att du bara lägger upp en fråga på http://stackoverflow.com/ eller http://www.reddit.com/r/learnpython så lär du få ett lösningsförslag rätt omgående.

Länk till kommentar
Dela på andra webbplatser

Ett trick som egentligen inte förändrar själva lösningsmetodiken kunde vara att koda varje sekvens till ett unikt heltal. T.ex. kan du låta festa = 0, sova = 1, plugga = 2 och tenta = 3. Sedan använder du förslagsvis tal med basen fyra om det är fyra utfall du har.

 

Exempel: ( festa, sova, tenta ) => (013) i basen 4 = 0*4^2 + 1*4^1 + 3*4^0 = 7 i basen tio.

 

På så sätt blir i alla fall jämförelsen lättare i och med att du inte behöver jämföra hela sekvenser med varandra, utan bara deras heltalsrepresentation.

Länk till kommentar
Dela på andra webbplatser

Nej, då verkar det inte vara någon poäng att ge sig på några mattetrick.

 

Är problemet alltså att du har en datastruktur av typen lista och inte kan hysta in den i en datastruktur av typen lexikon eftersom lexikon inte accepterar? Kan du inte bara göra om handlingslistan till en sträng, eller något annat som ett lexikon kan tänka sig att hantera, och på så sätt få in det.

 

Alternativt rekommenderar jag att du bara lägger upp en fråga på http://stackoverflow.com/ eller http://www.reddit.com/r/learnpython så lär du få ett lösningsförslag rätt omgående.

 

Ja det är problemet, hur gör man om sin lista till en sträng då? För när vi valt tre saker, [plugga, sova, festa] så hamnar de ju i en lista (och de måste hamna i en lista, annars kan man inte appenda och remova nya val som knappas in). Finns det någon funktion som gör om en lista till en sträng av typen 'plugga, sova, festa' istället?

 

Ja, får alternativt slänga upp frågan där sen om jag inte kommer fram till någon bra lösning :)

 

Ett trick som egentligen inte förändrar själva lösningsmetodiken kunde vara att koda varje sekvens till ett unikt heltal. T.ex. kan du låta festa = 0, sova = 1, plugga = 2 och tenta = 3. Sedan använder du förslagsvis tal med basen fyra om det är fyra utfall du har.

 

Exempel: ( festa, sova, tenta ) => (013) i basen 4 = 0*4^2 + 1*4^1 + 3*4^0 = 7 i basen tio.

 

På så sätt blir i alla fall jämförelsen lättare i och med att du inte behöver jämföra hela sekvenser med varandra, utan bara deras heltalsrepresentation.

 

Oj, låter komplicerat. Förstår dock inte riktigt hur detta löser vårt ursprungsproblem dock, att ABC != CBA? :oops:

Länk till kommentar
Dela på andra webbplatser

Oj, låter komplicerat :) Förstår dock inte riktigt hur detta löser vårt ursprungsproblem dock, att ABC != CBA? :oops:

Nej, det är egentligen inte så komplicerat. Tänk själv hur naturligt det är för dig (förhoppningsvis :) ) att förstå positionssystemet i basen 10 (d.v.s att 1234 != 3241), och omsätt sedan till basen 4. *)

 

Eftersom de olika positionerna är olika mycket värda blir representationen för ABC en annat tal än BCA, precis som 561 är ett annat tal än 156.

 

*) Egentligen kan du lika gärna använda basen 10 (eller någon annan bas, så länge den är 4 eller högre), men då får du luckor i din representation, d.v.s. heltal som inte har någon motsvarighet i sekvens.

Länk till kommentar
Dela på andra webbplatser

Nej, det är egentligen inte så komplicerat. Tänk själv hur naturligt det är för dig (förhoppningsvis :) ) att förstå positionssystemet i basen 10 (d.v.s att 1234 != 3241), och omsätt sedan till basen 4. *)

 

Eftersom de olika positionerna är olika mycket värda blir representationen för ABC en annat tal än BCA, precis som 561 är ett annat tal än 156.

 

*) Egentligen kan du lika gärna använda basen 10 (eller någon annan bas, så länge den är 4 eller högre), men då får du luckor i din representation, d.v.s. heltal som inte har någon motsvarighet i sekvens.

 

jaa, nu förstår jag :) Men det blir ju problem ändå, jag vill ju exempelvis att ['festa','sova','plugga'] ska vara en bra kombination, men det får värdet 012, som är lägre än ['sova','plugga','sova'] som är en dålig kombination. Det är i sin tur lägre än ['sova','plugga','festa'] som också ska vara en bra kombination. Så jag tror inte att detta automatiskt löser våra problem såvida jag inte missat något.

 

Kan inte python, men 80%+ att det finns en inbyggd metod. Till exempel gav "how to make a list into a string python" den här länken: http://www.decalage.info/en/python/print_list

 

join verkar inte fungera för mig? :o "NameError: name 'join' is not defined".

 

Jag tror att jag kanske gör så att jag gör två listor, en som ger ökning av storlek, och en som ger minskning. Dessa två listor lägger jag i en text-fil som mitt program öppnar och läser in. På så sätt så ser det hyfsat neat ut samtidigt som det bör utan tvekan fungera.

Länk till kommentar
Dela på andra webbplatser

verkar ju onödigt att använda ett lexikon när du bara ska hålla koll på 5 olika sekvenser, men det borde rimligen bli 5 if-satser och inte 200.

 

Blir ju [tenta,festa,plugga], [tenta,festa,sova],[tenta,plugga,festa],[tenta,plugga,sova] osv osv. Det blir ju ganska många möjliga kombinationer. med 4 möjliga val i tre olika positioner.

Länk till kommentar
Dela på andra webbplatser

jaa, nu förstår jag :) Men det blir ju problem ändå, jag vill ju exempelvis att ['festa','sova','plugga'] ska vara en bra kombination, men det får värdet 012, som är lägre än ['sova','plugga','sova'] som är en dålig kombination. Det är i sin tur lägre än ['sova','plugga','festa'] som också ska vara en bra kombination. Så jag tror inte att detta automatiskt löser våra problem såvida jag inte missat något.
Sansrom snackar nog bara om representation inte, som jag gjorde tidigare, om att dessutom processa eländet mha matematiska operationer. Poängen är att du kan jobba med heltal istället för listor, vilket torde vara enklare oavsett om du vill använda if-satser, filer, lexikon eller vad som helst senare.

 

Anledningen att jag snackade om matematiska trick som att jämföra produkten av heltalsrepresentationerna är att jag trodde att det var något sånt uppgiften gick ut på, vilket det rätt tydligt inte är.

 

join verkar inte fungera för mig? :o "NameError: name 'join' is not defined".
Ja, då kan du ju antingen googla felet eller kika på något av de övriga tusentals resultaten. :-)
Länk till kommentar
Dela på andra webbplatser

jaa, nu förstår jag :) Men det blir ju problem ändå, jag vill ju exempelvis att ['festa','sova','plugga'] ska vara en bra kombination, men det får värdet 012, som är lägre än ['sova','plugga','sova'] som är en dålig kombination. Det är i sin tur lägre än ['sova','plugga','festa'] som också ska vara en bra kombination. Så jag tror inte att detta automatiskt löser våra problem såvida jag inte missat något.

Nej, det var därför jag skrev att det egentligen inte är någon annan lösningsmetodik, utan det krävs fortfarande jämförelser. Vilket är ganska svårt att komma ifrån, eftersom problemet är att kunna skapa bra och dåliga sekvenser helt godtyckligt om jag inte missförstår något. Därför kan det kanske vara bra att fokusera på att göra jämförelserna på ett så snyggt och effektivt sätt som möjligt, vilket metoden med heltalsrepresentation syftar till.

 

I det generella fallet kan du till exempel se till att alla bra respektive dåliga heltal lagras sorterat, vilket gör sökningen snabb. Blir det för många och för stora tal att hålla reda på kan man använda någon slags hashning, men det känns lite overkill just nu.

Länk till kommentar
Dela på andra webbplatser

On the top of my head:

 

Skapa en lista som innehåller de kombinationer du vill ha.

 

Säg att du har fyra olika kombinationer:

 

festa = 1

plugga = 2

tenta = 3

sova = 4

 

243

423

223

123

 

Kombinationer över n är dåliga.

 

Iterera över listan, får du träff och i <= n. Så är det det bra. Får du träff i > n är det dåligt.

 

Kan inte python men typ:

 

def grow(sequence, li):

index = getIndex(sequence, li)

 

if sequence == -1:

print "no valid sequence"

elif index > 2:

shrink();

else

grow();

 

 

def getindex(sequence, li):

for i in range(len(li)):

if sequence == li:

return i;

else:

return -1;

Länk till kommentar
Dela på andra webbplatser

Sansrom snackar nog bara om representation inte, som jag gjorde tidigare, om att dessutom processa eländet mha matematiska operationer. Poängen är att du kan jobba med heltal istället för listor, vilket torde vara enklare oavsett om du vill använda if-satser, filer, lexikon eller vad som helst senare.

 

Anledningen att jag snackade om matematiska trick som att jämföra produkten av heltalsrepresentationerna är att jag trodde att det var något sånt uppgiften gick ut på, vilket det rätt tydligt inte är.

 

Ja, då kan du ju antingen googla felet eller kika på något av de övriga tusentals resultaten. :-)

 

right då förstår jag, ska göra det, tack!

 

Nej, det var därför jag skrev att det egentligen inte är någon annan lösningsmetodik, utan det krävs fortfarande jämförelser. Vilket är ganska svårt att komma ifrån, eftersom problemet är att kunna skapa bra och dåliga sekvenser helt godtyckligt om jag inte missförstår något. Därför kan det kanske vara bra att fokusera på att göra jämförelserna på ett så snyggt och effektivt sätt som möjligt, vilket metoden med heltalsrepresentation syftar till.

 

I det generella fallet kan du till exempel se till att alla bra respektive dåliga heltal lagras sorterat, vilket gör sökningen snabb. Blir det för många och för stora tal att hålla reda på kan man använda någon slags hashning, men det känns lite overkill just nu.

 

ah då förstår jag, hasning känns lite överkurs atm :P Jag kämpar för att förstå det allra mest grundläggande fortfarande :(

 

On the top of my head:

 

Skapa en lista som innehåller de kombinationer du vill ha.

 

Säg att du har fyra olika kombinationer:

 

festa = 1

plugga = 2

tenta = 3

sova = 4

 

243

423

223

123

 

Kombinationer över n är dåliga.

 

Iterera över listan, får du träff och i <= n. Så är det det bra. Får du träff i > n är det dåligt.

 

Kan inte python men typ:

 

def grow(sequence, li):

index = getIndex(sequence, li)

 

if sequence == -1:

print "no valid sequence"

elif index > 2:

shrink();

else

grow();

 

 

def getindex(sequence, li):

for i in range(len(li)):

if sequence == li:

return i;

else:

return -1;

 

förstår inte riktigt tbh, känner inte igen index-yttrycket och inte heller sequence, li eller egentligen vad som händer här :P

 

Tycker det känns som en sån där typuppgift där de "vill" att man ska använda en automat, men känns samtidigt på gränsen till överdrivet. Se t ex kapitel 12 här.

 

Dvs, ha ett gäng olika tillstånd. Definiera i varje tillstånd och för varje knapp till vilket state man övergår.

 

Oj, ja, känns inte som nåt som är direkt applicerbart bara sådär, måste nog lära sig konceptet. Jag gör helt enkelt så att jag går på labben nästa gång och frågar en asse vad som kan tänkas vara en rimlig metod.

Länk till kommentar
Dela på andra webbplatser

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Endast 75 max uttryckssymboler är tillåtna.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Ditt tidigare innehåll har återställts.   Rensa redigerare

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Skapa nytt...