Fast vid kmom02 - marvin roboten

  • Författare
  • Meddelande

lebr17

html-kodare

  • Inlägg: 12
  • Blev medlem: 29 aug 2017, 11:28

Fast vid kmom02 - marvin roboten

Inlägg11 sep 2017, 15:04

Hej ! Skulle behöva hjälp med min marvin robot lite...

På alternativ 7 där den ska generera 10 randomiserade siffror mellan från två olika inputs har jag suttit fast ett tag nu. Vad gör jag för fel?

Här ligger min kod:

https://codepaste.net/5yys2x
Användarvisningsbild

lrc

troubleshooter

  • Inlägg: 405
  • Blev medlem: 11 aug 2016, 21:38
  • Ort: Östersund

Re: Fast vid kmom02 - marvin roboten

Inlägg11 sep 2017, 16:47

Du är halvvägs framme. Anropet till slumptalsfunktionen är rätt, men du behöver göra en riktig loop som skriver ut siffrorna (eller lägger till dem i en lista och sedan skriver ut listan).

För att förstå vad din nuvarande kod gör, försök följa med i denna exempelsekvens på hur Python exekverar den:
Kod: Markera allt
a = 100
s = 0

# 1
klar = random.randint(s, a) in range(10)

# 2
klar = random.randint(0, 100) in range(10)

# 3
klar = 47 in range(10)

# 4
klar = 47 in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 5
klar = False

Med andra ord skapar du ett slumpmässigt heltal mellan s och a (inklusivt) och testar sedan ifall detta värde ingår i en heltalslista som sträcker sig från 0 till 9 (inklusivt). Detta resultat, d.v.s. True eller False, lagrar du sedan i klar.

lebr17

html-kodare

  • Inlägg: 12
  • Blev medlem: 29 aug 2017, 11:28

Re: Fast vid kmom02 - marvin roboten

Inlägg12 sep 2017, 12:14

Tack!

Följde dina råd och lyckades med det menyvalet!

Har dock fått problem igen med nästa menyval...

Något tips? sum(results.values()) ger mig bara noll...

I detta menyval ska användaren skriva in valfritt antal siffror och sedan avsluta med done

då ska koden ger tillbaks summan av alla inputs och medelvärdet av alla dem...

Sitter fast igen och börjar bli lite stressad :O


https://codepaste.net/t6t4kh
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Fast vid kmom02 - marvin roboten

Inlägg12 sep 2017, 13:56

Det är en större kodmassa i din codepasta, ibland är det enklare att få svar om man lyfter ut just den biten man jobbar med och visar bara den.
Kod: Markera allt
    elif choice == "8":
        results = {}
        counter = 1
        while True:
            response = input("What number? (done to quit) ")
            if response == 'done':
                print(sum(results.values()))
                break
            elif response == int:
                results[counter] = response
                counter += 1


Vad sägs om att lägga en print-sats under elif-satsen och skriva ut när du går in i den delen? Ibland fungerar print utmärkt när man vill förstå hur koden exekveras.
...
..:
.... /mos

lebr17

html-kodare

  • Inlägg: 12
  • Blev medlem: 29 aug 2017, 11:28

Re: Fast vid kmom02 - marvin roboten

Inlägg14 sep 2017, 15:32

Okej, ska försöka de... Sitter fortfarande fast!! Nått tips på var man kan läsa om dehär med att spara input för senare användning? Hittar det inte nån stanna i de videos eller övningar vi haft till kmom02!!!
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Fast vid kmom02 - marvin roboten

Inlägg14 sep 2017, 16:18

Problemformuleringen är alltså:
skriva in valfritt antal siffror och sedan avsluta med done


Om du gör en loop, som gör input(), och kollar om retur-värdet från input() == "done" eller inte. Då löser du den biten.

Ibland/ofta är det så att uppgifterna kanske inte har en direkt mappning mot kursmaterialet. Man har lärt sig input() vid ett tillfälle, sedan lär man sig loopar vid ett annat tillfälle, sedan är det en övning i problemlösning att sätta samman de kunskaperna man fått från olika delar för att lösa en specifik uppgift.

Vad skall du göra med värdet från input? Om det handlar om att summera dem så kan du bara plussa dem till en variabel.

Ungefär i stil med.
results = 0

while True:
response = input("What number? (done to quit) ")
if response == 'done':
print(results)
break

results += int(response)


Koden ovan bör läsa in tills "done" och summera allt annat som kommer in. Det ger dig principen för hur du kan tänka och lösa.
...
..:
.... /mos

lebr17

html-kodare

  • Inlägg: 12
  • Blev medlem: 29 aug 2017, 11:28

Re: Fast vid kmom02 - marvin roboten

Inlägg14 sep 2017, 19:34

Förstår! Tack!

Har nog missförstått uppgiften... Tänkte att man skulle lagra all input i en lista men gjorde det bara svårt för mig själv i onödan. Förstår självklart också att ni förväntar er att man förstår input sedan innan. Nu är allt som de ska!
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Fast vid kmom02 - marvin roboten

Inlägg14 sep 2017, 19:38

Härligt att det löste sig, det är många små saker som behöver falla på plats.
...
..:
.... /mos

anbj17

html-kodare

  • Inlägg: 11
  • Blev medlem: 26 aug 2017, 21:42

Re: Fast vid kmom02 - marvin roboten

Inlägg21 sep 2017, 15:57

Jag behöver också hjälp med precis dessa uppgifterna (jag veet att jag ligger efter, förlååt!)

Så här långt har jag kommit:
https://codeshare.io/5eMJ7A

På 7:an förstår jag att jag behöver en loop för att slumpa fram 10 tal och inte bara ett, men jag behöver hjälp att förstå hur.

På 8:an använder jag lösningsförslaget ovan, och har väl tänkt något med "sum"-variabeln också, men vad det än var så är det inte rätt...

Hur ska jag tänka/vad ska jag göra för att lösa dem?
(Loopar har jag haft svårt med, därav förseningen...)
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Fast vid kmom02 - marvin roboten

Inlägg21 sep 2017, 16:20

Om du ska ha en loop som ger dig 10 tal så behöver du göra en loop som kör 10 gånger. En lämplig loop för det är en for-loop. Om du har problem med loopar föreslår jag att du läser kurslitteraturen: Python for Everybody: Iteration

I boken beskrivs en definitiv loop (Definite loops using for) med hjälp av en lista av vänner. Har man ett bestämt antal gånger man ska loopa kan man snabbt skapa en lista av nummer med hjälp av range().

För att lösa uppgiften med summa och medel behöver du nog sätta dig med papper och penna och räkna ut medel för hand. Ta till exempel siffrorna 5, 12 och 61. Hur räknar du ut summan? Hur räknar du ut medelvärdet? Skriv ner varje steg för sig, ett steg i taget.

anbj17

html-kodare

  • Inlägg: 11
  • Blev medlem: 26 aug 2017, 21:42

Re: Fast vid kmom02 - marvin roboten

Inlägg21 sep 2017, 16:53

Jag har läst kurslitteraturen flera gånger men har ändå svårt att förstå hur jag sätter ihop det, då mina försök blir fel. Var och hur ska range(10) stå?

Och jag vet hur jag räknar ut medelvärde, men det jag fastnar på är hur jag får koden att dela med antalet "inputs" och inte med summan, eftersom antalet blir olika varje gång.


Jag har löst uppgifterna på egen hand!

virs17

javascriptare

  • Inlägg: 37
  • Blev medlem: 27 aug 2017, 21:32

Re: Fast vid kmom02 - marvin roboten

Inlägg02 okt 2017, 18:32

Skulle gärna veta vad du gjorde.
Jag har också problem med nr 7 och nr 8, har suttit länge och kommer inte klara av dem.
Har hittat workaround med nr 7 genom att importera random och köra randint(min, max), men den ser inte rätt ut ändå.
Det finns ingen info i kurslitteraturen som jag kan använda för att lösa nr 8 heller.
Det jag har så länge är
Kod: Markera allt
elif choice == "8":
        results = {}
        counter = 1
        while True:
            response = input("Enter number: (type 'done' to quit) ")
            if response == 'done':
                break
            results[counter] = response
            counter += 1
        total = 0
        for itervar in(results.items()):
            total = total + itervar
        print("\nObi says:\n")
        print('Total: ', total)
        average = sum(results.items())/float(len(results.items()))
        print('Average: ', average)

Jag kan dock inte konvertera tuple till integer. Och där sitter jag och det är väl normalt därför att jag förstår inte mestaparten av vad jag skriver ändå. Alla lösningar jag hittat på nätet, därför att uppgifter går inte att lösa med användning av kursmaterialen, och antagligen så kommer jag inte lära mig nånting heller :shock: :cry:
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Fast vid kmom02 - marvin roboten

Inlägg03 okt 2017, 11:19

Ibland händer det att man gör saker mer komplicerade än nödvändigt. Tupler och dictionaries kommer först i kmom05, den här uppgiften går att lösa med enkel matematik istället.

Du vet hur man räknar ut summan av olika tal. Men du vet ännu inte hur man samlar alla talen bredvid varandra. Det behövs inte heller, du kan räkna ut summan steg för steg genom att bara veta summan hittills och vilken siffra som ska läggas till.

Först får du siffran 5. Nu är summan 5. Sen får du siffran 12. Nu är summan 17. Efter att ha slagit ihop 5 och 12 behöver du inte längre komma ihåg hur du kom fram till summan, du behöver inte spara siffrorna som ledde dit. Allt du behöver är summan hittills. Sen får du siffran 61. Du vet vad summan är hittills och kan lägga till 61. Då får du en ny summa.

Men uppgiften går också ut på att räkna ut medelvärdet. För att lyckas med det behöver man veta hur många tal som har summerats. Du behöver fortfarande inte veta vilka tal det var, bara hur många det var. Varje gång du summerar en siffra kan du därför öka på en räknare som räknar antal tal.

Till det här behöver man inga listor eller tupler eller dictionaries. Det räcker med integers, + och =.

virs17

javascriptare

  • Inlägg: 37
  • Blev medlem: 27 aug 2017, 21:32

Re: Fast vid kmom02 - marvin roboten

Inlägg03 okt 2017, 15:57

Tack! När jag fattade att jag måste använda en counter (förstår inte ordentligt fortfarande hur den fungerar men antar att jag får nog läsa om detta också snart) då gick det att klara av uppgiften :D :D :D

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 14 gäster