Hjälp med Python! Totalt kört fast i en uppgift...

Permalänk

Hjälp med Python! Totalt kört fast i en uppgift...

Tjena! Jag har nyligen börjat programmera med python och skulle behöva hjälp med denna uppgift som jag verkligen inte får ihop.

Gör ett program som slumpar ett tal mellan 1 och 50 och sen ber användaren att gissa på vilket tal som är slumpat. Om användaren gissar rätt ska det skrivas ut ”Grattis, det var rätt” annars ska användaren få information om gissningen var för hög eller för låg och sen få chansen att gissa igen. Programmet ska även hålla reda på hur många gånger användaren gissat och sist visa det, t.ex. ”Du gissade 7 gånger.”

Använd funktionen input() för inmatning och kommandot print för att skriva ut.

Säkert väldigt lätt för er andra...

tacksam för alla svar

Permalänk
Medlem

Ingen här komme göra uppgiften åt dig. men ett bra tips för vilken typ av programmerare som helst är att sätta sig ner med papper och penna och skissa vad det faktiskt är man ska göra. hjälpt mig många gånger!

detta är en hyfsat lätt uppgift som du kommer kunna lösa själv om du sätter dig ner och faktiskt försöker

Visa signatur

Outtröttlig, löpartokig besserwisser!

Bli vegan! För djuren, planeten, hälsan och våra barns skull!

Permalänk

Så här långt kommer jag. Antar sedan att mina kunskap brister när man ska använda while(?) satserna? Och hur gör man så den håller räkningen på hur många gånger man har gissat?

import random
print "HEJ! Du ska nu gissa på vilket tal som slumpas fram"
print "Talet slumpas nu fram..."
x=random.randint(1,50)
print x
q=input ("Vänligen gissa vilket tal som slumpades fram..")
if q==x:
print "GRATTIS! DU HADE RÄTT!"
elif q<x:
print "För lågt!"
else:
print "För högt!"

Permalänk

Har du något tips/hjälp du kan ge mig hur jag skall fortsätta?

Permalänk
Medlem

Det du behöver är en while loop. Sen får du själv lista ut hur den används.

Permalänk

Någon som har nått tips på vart man kan hitta en guide och lära sig om while loopar?

Permalänk
Hedersmedlem
Skrivet av gamlabettan:

Så här långt kommer jag. Antar sedan att mina kunskap brister när man ska använda while(?) satserna? Och hur gör man så den håller räkningen på hur många gånger man har gissat?

import random
print "HEJ! Du ska nu gissa på vilket tal som slumpas fram"
print "Talet slumpas nu fram..."
x=random.randint(1,50)
print x
q=input ("Vänligen gissa vilket tal som slumpades fram..")
if q==x:
print "GRATTIS! DU HADE RÄTT!"
elif q<x:
print "För lågt!"
else:
print "För högt!"

Skriv din kod i [code][/code]-taggar här på forumet, annars är det svårt att läsa, och i Pythons fall ej giltig kod.

Din kod:

import random print "HEJ! Du ska nu gissa på vilket tal som slumpas fram" print "Talet slumpas nu fram..." x=random.randint(1,50) print x q=input ("Vänligen gissa vilket tal som slumpades fram..") if q==x: print "GRATTIS! DU HADE RÄTT!" elif q<x: print "För lågt!" else: print "För högt!"

Eftersom din loop ska köras tills du är klar (inte ett bestämt antal gånger) så bör du använda en while-loop, som du sagt.

Du behöver ha en räknare som håller koll på hur många gånger loopen körts — dvs en vanlig variabel som du ökar med 1 inuti loopen.

Prototyp-while-loop:

i=0 while i < 10: i = i+1 print i

För att while-loopen ska veta när den ska sluta (när användaren gissat rätt i ditt fall) så måste du ange ett villkor — i ovanstående fall att i är mindre än 10. Varje gång loopen når sitt slut så kontrolleras detta villkor, och om det är OK så körs loopen igen. Jag kan tänka mig två olika sätt att sätta villkoren i ditt fall, det ena beroende på om ni lärt er `break` än. Det andra är mer rättfram.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk

Tack för svaren och hjälpen!

Är jag helt ute och cyklar nu eller har jag kommit lite närmare? Dock så funkar det inte att köra programmet, och ordet "break" markeras rött.

import random print "HEJ! Du ska nu gissa på vilket tal som slumpas fram" print "Talet slumpas nu fram..." x=random.randint(1,100) print x q=input ("Gissa vilket tal som har slumpats fram..") while q<x: q=q+1 if q==x: break elif q<x: print ("För högt") else: print ("För lågt") print "RÄTT"

Permalänk
Medlem
Skrivet av gamlabettan:

Någon som har nått tips på vart man kan hitta en guide och lära sig om while loopar?

Alltså, testa skriv in google.com i adress-rutan i webbläsaren sedan sök på "python while". Tar inte lång tid och ger en del relevanta träffar.

Vill inte verka otrevlig men det uppskattas alltid om en person faktiskt försöker lösa det på egen hand före man frågar andra.

Visa signatur

In order to understand recursion, one must first understand recursion

Permalänk
Hedersmedlem
Skrivet av gamlabettan:

Tack för svaren och hjälpen!

Är jag helt ute och cyklar nu eller har jag kommit lite närmare? Dock så funkar det inte att köra programmet, och ordet "break" markeras rött.

import random print "HEJ! Du ska nu gissa på vilket tal som slumpas fram" print "Talet slumpas nu fram..." x=random.randint(1,100) print x q=input ("Gissa vilket tal som har slumpats fram..") while q<x: q=q+1 if q==x: break elif q<x: print ("För högt") else: print ("För lågt") print "RÄTT"

Du har fel i indenteringen på break.

Följ koden och säg högt för dig själv vad den gör, t ex:

  1. Jag slumpar fram ett tal x.

  2. Jag sätter q till ett tal som personen gissar på (t ex 37).

  3. Om 37 är mindre än x så fortsätter jag in i loopen, annars skriver jag "RÄTT".

  4. Jag ökar q från 37 till 38 första gången loopen körs.

  5. Om 38 är lika med x så avbryter jag och skriver "RÄTT".

  6. Om 38 är mindre än x skriver jag "För högt".

  7. Annars skriver jag "För lågt".

  8. Gå till 3.

Steg 3, 4, 5, 6, 7 är inte den logik du är ute efter. Steg 2 görs bara en gång, men personen ska kunna gissa många gånger.

Som sagt: gå igenom koden och säg den högt för dig själv hela tiden i början. Om du inte förstår tillräckligt bra vad den gör för att kunna formulera detta muntligt så behöver du läsa in dig på det du inte kan. Om du läser den högt för dig själv och märker att den inte gör vad du vill så behöver du ändra koden.

På denna nivån så är det viktigaste att du gör sakerna själv så att du förstår, och att du lär dig att analysera vad du gör på ett strukturerat sätt. Alla nybörjarkurser jag sett börjar med just extremt enkla saker där det handlar om att säga t ex "vad skriver denna koden ut?" och liknande. Det är för att lära dig att läsa och förstå kod, vilket du lär dig med övning. Detta brukar läras ut innan man ens skriver kod, av en anledning. Jag rekommenderar att prata högt med dig själv som jag beskrev ovan. Efter ett tag kanske du klarar det samtidigt som du är tyst .

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

import random x = random.randint(1,50) times = 0 bool = True while bool is True: answer = int(raw_input("Guess the number: ")) times += 1 if answer < x: print "The number you wrote is too small!" elif answer > x: print "The number you wrote is too large!" else: bool = False print "Congratulations!" print "You guessed "+str(times)+" times."

Visa signatur

Osocial, instängd och förbannad.

Permalänk

Tack! Hittade du på någon sida eller skrev du själv Debug? med tanke på att det är på engelska. Ska dock försöka med ett annat program där jag inte får svaret serverat

Permalänk
Medlem
Skrivet av gamlabettan:

Tack! Hittade du på någon sida eller skrev du själv Debug? med tanke på att det är på engelska. Ska dock försöka med ett annat program där jag inte får svaret serverat

Jag skrev det själv.
Jag föredrar att använda engelska när jag programmerar.

Visa signatur

Osocial, instängd och förbannad.

Permalänk
Medlem

Koden som Debug klippte in är ett halvdåligt exempel. Problemet koden har är att han använder en variabel kalla "bool" till att hålla rätt på om while-loopen ska fortsätta eller ej. Tyvärr är bool redan upptaget, det är så typen True/False heter. Detta ställer till en del problem även om det är giltig kod, och kan skapa väldigt luriga fel.

Man bör aldrig skriva över/återanvända objekt, typer och annat som redan är definierade utom i undantagsfall om har en riktigt god anledning. (Jag vet att koden som den står fungerar, men den är ett dåligt exempel för gamlabettan att titta på)

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Medlem
Skrivet av vb:

Koden som Debug klippte in är ett halvdåligt exempel. Problemet koden har är att han använder en variabel kalla "bool" till att hålla rätt på om while-loopen ska fortsätta eller ej. Tyvärr är bool redan upptaget, det är så typen True/False heter. Detta ställer till en del problem även om det är giltig kod, och kan skapa väldigt luriga fel.

Nej, det är inte så Python funkar. Man behöver inte specifiera vilken datatyp en variabel har, som i t.ex. C/C++.

int x = 1; string y = "Hello!";

x = 1 y = "Hello!"

Det första kodexemplet ovan är C++ och det andra är Python. En specifiering sker automatiskt, och skulle man behöva specifiera manuellt så kan man använda funktioner som str() och int().

Skrivet av vb:

Man bör aldrig skriva över/återanvända objekt, typer och annat som redan är definierade utom i undantagsfall om har en riktigt god anledning. (Jag vet att koden som den står fungerar, men den är ett dåligt exempel för gamlabettan att titta på)

Jag återanvänder inte någon variabel då variabeln för datatypen bool inte existerar i Python, liksom inte några variabler för datatypen int eller string existerar i Python heller. Det sker som sagt automatiskt och kan specifieras med hjälp av funktioner.

Visa signatur

Osocial, instängd och förbannad.

Permalänk
Medlem
Skrivet av Debug:

Nej, det är inte så Python funkar. Man behöver inte specifiera vilken datatyp en variabel har, som i t.ex. C/C++.

int x = 1; string y = "Hello!";

x = 1 y = "Hello!"

Det första kodexemplet ovan är C++ och det andra är Python. En specifiering sker automatiskt, och skulle man behöva specifiera manuellt så kan man använda funktioner som str() och int().

Jag återanvänder inte någon variabel då variabeln för datatypen bool inte existerar i Python, liksom inte några variabler för datatypen int eller string existerar i Python heller. Det sker som sagt automatiskt och kan specifieras med hjälp av funktioner.

Det stämmer inte. Python är dynamiskt typat, men det har fortfarande typer:

>>> type("test") <type 'str'> >>> type(1 == 1) <type 'bool'> >>> type(1 == 1) is bool True

Sista raden testar om typen av uttrycket 1==1 är av typen bool. Kanske missförstår jag vad du menar med "variabel för datatyp", men typer och typnamn finns som synes.

sidnotis: tycker även det är opedagogiskt att ge en komplett lösning på ett skolproblem, i synnerhet om det inte ges någon förklaring på vad som egentligen händer i den givna koden..

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Debug:

Nej, det är inte så Python funkar. Man behöver inte specifiera vilken datatyp en variabel har, som i t.ex. C/C++.

int x = 1; string y = "Hello!";

x = 1 y = "Hello!"

Det första kodexemplet ovan är C++ och det andra är Python. En specifiering sker automatiskt, och skulle man behöva specifiera manuellt så kan man använda funktioner som str() och int().

Citat:

Jag återanvänder inte någon variabel då variabeln för datatypen bool inte existerar i Python, liksom inte några variabler för datatypen int eller string existerar i Python heller. Det sker som sagt automatiskt och kan specifieras med hjälp av funktioner.

Visserligen fungerar inte python likadant som C++, man behöver som sagt inte specifiera vilken datatyp en variabel har eftersom det är dynamiskt typat. Dock finns det fortfarande typer i python. Internt håller den alltid rätt på vad en variabel har för typ, och det är inte ok att tex lägga ihop en sträng med en int. Vill man veta typen på något kan man använda type().
Iaf, att du kan göra det du gör i python är ju just det som ger upphov till problemet int, bool, str osv är alla typer/klasser som är inbyggda i python, och att skriva över dom är nästan alltid fel.

Låt mig visa två små kodsnuttar som visar problemet:

>>> type(True) <type 'bool'> >>> type(True) == bool True >>> bool = True >>> type(True) == bool False >>> int("1") 1 >>> int = 3 >>> int("2") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not callable

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon