Slumpmässiga tal

  • Författare
  • Meddelande

kalu15

troubleshooter

  • Inlägg: 301
  • Blev medlem: 12 jan 2015, 20:14

Slumpmässiga tal

Inlägg01 feb 2015, 11:46

Hur får man de slumpmässiga talen att hamna kommaseparerade på en rad?
//Katja
Användarvisningsbild

joaj14

troubleshooter

  • Inlägg: 457
  • Blev medlem: 19 aug 2014, 18:32
  • Ort: Helsingborg

Re: Slumpmässiga tal

Inlägg01 feb 2015, 11:50

Hej,

Var har du kört fast? Vad har du gjort hittills?

Hur skriver man ut saker på skärmen? Hur anger man separator? Hur får man slumptalen? Var lagrar du dessa?

Beskriv var du är för stunden och förklara ditt problem så blir det lättare att hjälpa dig. Länka gärna till din nuvarande kod så kan man lättare se problemet.


Mvh,
Johan - fellow student

kalu15

troubleshooter

  • Inlägg: 301
  • Blev medlem: 12 jan 2015, 20:14

Re: Slumpmässiga tal

Inlägg01 feb 2015, 11:59

Jag har gjort uppgiften Random numbers i Marvin1.
Men vet inte hur jag ska få svaren att hamna på en rad istället för uppifrån och ner.
Kod: Markera allt
import random
    for i in range(10):
        number = random.randint(a, b)
        print(str(number) + str(", "))
//Katja
Användarvisningsbild

joaj14

troubleshooter

  • Inlägg: 457
  • Blev medlem: 19 aug 2014, 18:32
  • Ort: Helsingborg

Re: Slumpmässiga tal

Inlägg01 feb 2015, 12:10

Hej,

Kanon, du har din data och du kan skriva ut den, men problemet är att print lägger till en radbrytning som du inte vill ha.

Hur ser funktionen print ut? Har den någon parameter man kan använda för ändamålet? Vad säger manualen?
https://docs.python.org/3/library/functions.html?highlight=print#print

Alternativt, måste du skriva ut den direkt? Kan du spara undan din data i loopen på något sätt för att skriva ut den senare?

Vad är det för skillnad på dessa lösningar? Vilken är att föredra? Varför?


Mvh,
Johan - fellow student

kalu15

troubleshooter

  • Inlägg: 301
  • Blev medlem: 12 jan 2015, 20:14

Re: Slumpmässiga tal

Inlägg01 feb 2015, 13:02

Om jag nu skulle vilja spara undan data i loopen för att skriva ut det senare hur gör jag då?
Har försökt att hitta det i manualen men jag förstår inte hur jag ska göra.
//Katja
Användarvisningsbild

joaj14

troubleshooter

  • Inlägg: 457
  • Blev medlem: 19 aug 2014, 18:32
  • Ort: Helsingborg

Re: Slumpmässiga tal

Inlägg01 feb 2015, 13:12

Hej,

Inne i loopen skriver du ut data direkt med print. Kan du kanske istället spara denna data till en variabel? Ta då bort din print inne i loopen och lägg print funktionen utanför loopen där du skriver ut din kompletta variabel.

Om du inte reder ut så det så posta din kod med så långt du kommer så tar vi det vidare därifrån.


Mvh,
Johan - fellow student

kalu15

troubleshooter

  • Inlägg: 301
  • Blev medlem: 12 jan 2015, 20:14

Re: Slumpmässiga tal

Inlägg01 feb 2015, 13:48

Hej igen :)
Jag trodde att number var den variablen
Kod: Markera allt
for i in range(10):
        number = random.randint(a, b)
        print(str(number) + str(", "))

När jag kör detta i Cygwin så wer det ut så här:
Give me 2 numbers min and max between 0 and 100
Select min 3
Select max 40
22,
19,
36,
13,
30,
13,
27,
33,
19,
14,

Då är ju print kvar inne i loopen men jag försökte flytta ut den men då får jag bara 1 nummer utskrivet.
//Katja
Användarvisningsbild

joaj14

troubleshooter

  • Inlägg: 457
  • Blev medlem: 19 aug 2014, 18:32
  • Ort: Helsingborg

Re: Slumpmässiga tal

Inlägg01 feb 2015, 14:07

Hej,

Jag antydde två olika varianter så jag tänkte att jag ska visa på båda. Först börjar jag dock med att fundera på vad manualen säger om print. Jag fokuserar på de tre första parametrarna som är relevanta i detta fallet.

print(*objects, sep=' ', end='\n')

Den första parametern objects är en eller flera värden som man vill skriva ut
Den andra parametern sep är separator mellan data och är bara relevant om man har flera värden vid varje utskrift
Den tredje parametern är radslut och som du ser så är default värdet \n, dvs radbrytning om man inte anger annat

Då vi i ditt exempel bara skriver ut ett värde i taget så är sep parametern meningslös. (Det finns även en lösning där man skriver ut listor och då denna används, men jag tror det är för tidigt i kursen.)

Däremot kan vi ha nytta av att ändra end till en tom sträng så här:

Kod: Markera allt
for i in range(10):
    number = random.randint(1, 10)
    print(str(number), end="")


Men då får vi alla siffror i en kompakt ström. Detta kan lösas på två sätt:

Kod: Markera allt
# variant 1
for i in range(10):
    number = random.randint(1, 10)
    print(str(number)+ str(","), end="")

# variant 2
for i in range(10):
    number = random.randint(1, 10)
    print(str(number), end=",")


Eller om man vill använda min andra idé att göra utskriften utanför loopen. Du har förvisso en variabel number men den innehåller bara ett tal, inte hela din utskrift. Så du måste ha ytterligare en variabel som blir det som sedan skrivs ut. Så här t.ex.

Kod: Markera allt
alldata = ""
for i in range(10):
    number = random.randint(1, 10)
    alldata = alldata + str(number) + str(", ")

print(alldata)



Samtliga varianter här har sina fördelar och nackdelar. Men oftast är det bäst att välja den som är mest lättläst för då ser man fel mycket lättare. Vilken variant föredrar du?


Mvh,
Johan - fellow student

kalu15

troubleshooter

  • Inlägg: 301
  • Blev medlem: 12 jan 2015, 20:14

Re: Slumpmässiga tal

Inlägg01 feb 2015, 14:36

Tack nu fungerar det :)
Jag föredrar din variant att köra utskriften utanför loopen.
//Katja

byme15

webbsurfare

  • Inlägg: 8
  • Blev medlem: 10 jan 2015, 18:29

Re: Slumpmässiga tal

Inlägg04 feb 2015, 00:45

joaj14 skrev:
Kod: Markera allt
# variant 1
for i in range(10):
    number = random.randint(1, 10)
    print(str(number)+ str(","), end="")

# variant 2
for i in range(10):
    number = random.randint(1, 10)
    print(str(number), end=",")



Tja , tänkte att jag kunde dela varianten jag använt mig av :)
Juaj14 nämnde varianten med listor (list.append(obj)), och nedan är koden jag använde:

Kod: Markera allt
#variant 3 (listor)
numbersinterval = [ ]
i = 0
while i < 10:
    i = i + 1
    numbersinterval.append(random.randint(1, 10))
print(numbersinterval)



MVH Byron Meza

Vilka är online

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