Permalänk
Skrivet av metalbast:

Nu kör du fasta värden.
Är det inte meningen att du ska mata in två värden?

Använd dig av en for-loop istället för while. Fungerar bättre i detta fallet.

Jag vet inte vad jag ska göra, Fick ett mail av läraren. Allt jag fick skrev jag i först inlägget. Kan kolla på det där for-loop saken.
Jag fick även detta. Använd dessa värden för att stega igenom alla tal mellan 25 och 45 och räkna ut deras kvadrater.
Skulle du kunna visa vad du menar så jag förstår bättre?

edit: Skulle det kunna vara såhär? http://prntscr.com/1z8rtv Då får jag fram alla siffror igen efter jag sagt ja.

Permalänk
Skrivet av phz:

Aaah där ser man, mitt misstag!

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Hedersmedlem
Skrivet av dLiinkz:

Jag vet inte vad jag ska göra, Fick ett mail av läraren. Allt jag fick skrev jag i först inlägget. Kan kolla på det där for-loop saken.
Jag fick även detta. Använd dessa värden för att stega igenom alla tal mellan 25 och 45 och räkna ut deras kvadrater.
Skulle du kunna visa vad du menar så jag förstår bättre?

edit: Skulle det kunna vara såhär? http://prntscr.com/1z8rtv Då får jag fram alla siffror igen efter jag sagt ja.

Du skriver nu:

i=25 while i <= 45: # Gör något i += 1

Detta är en så pass vanlig konstruktion att det finns en snabbform. "Vanligen" ser den ut ungefär så här i ett språk (OBS! Detta är inte Python):

for (i=25; i <= 45; i++) { # Gör något }

For-loopen bakar alltså in stegen att

  1. initiera "iteratorn" i

  2. definiera villkoret för att avsluta loopen

  3. utföra en operation på iteratorn efter varje "iteration".

I Python använder man inte riktigt samma syntax, men konceptet med en for-loop som en generalisering av en while-loop är bra att förstå.

I Python hade en sådan for-loop kunnat skrivas t ex:

for i in range(25, 45+1): # Gör något

Du ser att den har samma parametrar som i den mer "klassiska" loopen ovan, bara att de står på lite andra ställen. `range()` är en funktion som ger i detta falet alla tal mellan startvärdet 25 och slutvärdet 45+1=46 med steglängd 1 (det går att ändra, men det är vad du vill ha här, så det har jag inte gjort. Läs den länkade manualsidan), dvs första gång for-loopen körs så får i värdet 25, nästa gång 26, sedan 27, …, sedan 44, sedan 45, sedan är det slut. Mer tekniskt sagt så ger `range()` i Python 3 en generator; ett objekt som genererar nya värden vid varje access tills ett slutvillkor nås, då den sänder en speciell signal för att avsluta iterationen. I Python 2 ger `range()` en lista (också en speciell datatyp) med värdena, men då en lista är itererbar så ger det i praktiken samma resultat (men lite mindre minneseffektivt).

Så som du har skrivit nu, där du har copy+pasteat in din ursprungliga loop för att få programmet att köra den igen, är inte speciellt smidigt. Vi programmerar ju bl a just för att undvika onödiga upprepningar. Låt säga att du skulle vilja ändra lite i loopen: ska du nu behöva hålla reda på två olika ställen i koden? Säg att du hade haft ett större program där du hade skrivit loopen på 15 ställen: skulle du manuellt behöva leta upp alla dessa?

Vad händer om du i din kod helt enkelt tar bort den första loopen, och bara behåller koden från och med `while True:`? Behöver du skriva din huvudloop två gånger?

Jag har tidigare på forumet skrivit om ett smidigare sätt att testa input än att explicit kolla "n"/"N"/"j"/"J" genom att konvertera strängen innan testet utförs, och kanske än hellre bryta ut det i en egen del där man sätter en True/False-flagga.

Visa signatur

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

Permalänk
Skrivet av phz:

Du skriver nu:

i=25 while i <= 45: # Gör något i += 1

Detta är en så pass vanlig konstruktion att det finns en snabbform. "Vanligen" ser den ut ungefär så här i ett språk (OBS! Detta är inte Python):

for (i=25; i <= 45; i++) { # Gör något }

For-loopen bakar alltså in stegen att

  1. initiera "iteratorn" i

  2. definiera villkoret för att avsluta loopen

  3. utföra en operation på iteratorn efter varje "iteration".

I Python använder man inte riktigt samma syntax, men konceptet med en for-loop som en generalisering av en while-loop är bra att förstå.

I Python hade en sådan for-loop kunnat skrivas t ex:

for i in range(25, 45+1): # Gör något

Du ser att den har samma parametrar som i den mer "klassiska" loopen ovan, bara att de står på lite andra ställen. `range()` är en funktion som ger i detta falet alla tal mellan startvärdet 25 och slutvärdet 45+1=46 med steglängd 1 (det går att ändra, men det är vad du vill ha här, så det har jag inte gjort. Läs den länkade manualsidan), dvs första gång for-loopen körs så får i värdet 25, nästa gång 26, sedan 27, …, sedan 44, sedan 45, sedan är det slut. Mer tekniskt sagt så ger `range()` i Python 3 en generator; ett objekt som genererar nya värden vid varje access tills ett slutvillkor nås, då den sänder en speciell signal för att avsluta iterationen. I Python 2 ger `range()` en lista (också en speciell datatyp) med värdena, men då en lista är itererbar så ger det i praktiken samma resultat (men lite mindre minneseffektivt).

Så som du har skrivit nu, där du har copy+pasteat in din ursprungliga loop för att få programmet att köra den igen, är inte speciellt smidigt. Vi programmerar ju bl a just för att undvika onödiga upprepningar. Låt säga att du skulle vilja ändra lite i loopen: ska du nu behöva hålla reda på två olika ställen i koden? Säg att du hade haft ett större program där du hade skrivit loopen på 15 ställen: skulle du manuellt behöva leta upp alla dessa?

Vad händer om du i din kod helt enkelt tar bort den första loopen, och bara behåller koden från och med `while True:`? Behöver du skriva din huvudloop två gånger?

Jag har tidigare på forumet skrivit om ett smidigare sätt att testa input än att explicit kolla "n"/"N"/"j"/"J" genom att konvertera strängen innan testet utförs, och kanske än hellre bryta ut det i en egen del där man sätter en True/False-flagga.

Fick ett till mail där han sa att det ska vara användarstyrt. För att få det tänkte jag såhär: http://prntscr.com/1zcvte dock så fungerar inte att ha for i in range(a, b) Måste jag ha siffror i parentesen? Hur får jag den att bli användarstyrd? Vad ska jag använda för typ av python?

Permalänk
Hedersmedlem
Skrivet av dLiinkz:

Fick ett till mail där han sa att det ska vara användarstyrt. För att få det tänkte jag såhär: http://prntscr.com/1zcvte

Klistra in koden här på forumet innanför [code][/code]-taggar i stället för att länka till en bild på en extern sida. Dels vill användare sällan behöva jobba mer än nödvändigt för att hjälpa till, och dels så går det inte att kopiera in kod från en JPEG-bild.

Skrivet av dLiinkz:

dock så fungerar inte att ha for i in range(a, b) Måste jag ha siffror i parentesen?

Jag misstänker (men du borde ha gett denna information direkt när du bad om hjälp) att du får felmeddelandet

TypeError: 'str' object cannot be interpreted as an integer

Det är alltså något i ditt program (och Python säger nog tom på vilken rad det sker) som vill ha ett heltal, men du har gett en textsträng, och den förstår inte riktigt vad du menar. Om du googlar på felmeddelandet rakt av så är första träffen exakt vad du behöver. Lär dig det tillvägagångssättet för att lösa problem: läs felmeddelandet, och sök efter detsamma. Stack Overflow som just detta svar fanns på är en mycket bra sida; lär dig att gilla den.

Skrivet av dLiinkz:

Hur får jag den att bli användarstyrd?

Vad tänker du själv att "användarstyrd" betyder? Troligen är det just att användaren ska få mata in talen istf att de ska vara "hårdkodade" att vara 25 och 45.

Det lägger till fler frågor: hur ska ditt program bete sig om användaren matar in ordet "katt" istf ett tal? Om användaren ger talen i ordningen "45", sedan "25"? Om användaren ger talet "3.14"? Om användaren, när du frågar efter ett "j"/"J"/"n"/"N", svarar "Jajamensan!" eller "Aldrig i livet!"?

Skrivet av dLiinkz:

Vad ska jag använda för typ av python?

Det bör kursen ha klargjort. Det ser ut som att du börjat använda Python 3, så det är troligen vad ni har blivit ombedda att göra.

Visa signatur

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

Permalänk
Skrivet av phz:

Klistra in koden här på forumet innanför [code][/code]-taggar i stället för att länka till en bild på en extern sida. Dels vill användare sällan behöva jobba mer än nödvändigt för att hjälpa till, och dels så går det inte att kopiera in kod från en JPEG-bild.

Jag misstänker (men du borde ha gett denna information direkt när du bad om hjälp) att du får felmeddelandet

TypeError: 'str' object cannot be interpreted as an integer

Det är alltså något i ditt program (och Python säger nog tom på vilken rad det sker) som vill ha ett heltal, men du har gett en textsträng, och den förstår inte riktigt vad du menar. Om du googlar på felmeddelandet rakt av så är första träffen exakt vad du behöver. Lär dig det tillvägagångssättet för att lösa problem: läs felmeddelandet, och sök efter detsamma. Stack Overflow som just detta svar fanns på är en mycket bra sida; lär dig att gilla den.

Vad tänker du själv att "användarstyrd" betyder? Troligen är det just att användaren ska få mata in talen istf att de ska vara "hårdkodade" att vara 25 och 45.

Det lägger till fler frågor: hur ska ditt program bete sig om användaren matar in ordet "katt" istf ett tal? Om användaren ger talen i ordningen "45", sedan "25"? Om användaren ger talet "3.14"? Om användaren, när du frågar efter ett "j"/"J"/"n"/"N", svarar "Jajamensan!" eller "Aldrig i livet!"?

Det bör kursen ha klargjort. Det ser ut som att du börjat använda Python 3, så det är troligen vad ni har blivit ombedda att göra.

Jag kunde gjort det lite bättre, men tack för att du tog dig tid :). Såhär ser det ut nu.. Allt verkar fungerar utom det där på slutet, Skriver jag J kommer alla siffror tillbaka igen. Vill ha det så att man får skriva in nya tal.

print('Kvadrattabell') print('=============') print('Tal\tKvadrat') a = int(input("Skriv ett heltal: ")) b = int(input("Skriv ett till heltal: ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) i += 1 while True: svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'N' or svar == 'n': break if svar == 'J' or svar == 'j': i = 25 while i <= 45: print("{0}\t{1}".format(i,i*i)) i += 1

Edit, Det känns fel att ha

if svar == 'J' or svar == 'j': i = 25 while i <= 45: print("{0}\t{1}".format(i,i*i)) i += 1

Permalänk

Tänk lite på vad du vill göra när du skriver in J eller N

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Hedersmedlem
Skrivet av phz:

for i in range(25, 45+1): # Gör något

Detta var mitt exempel på en for-loop i Python — enbart detta. For-loopen inkluderar steget att öka på `i` efter varje iteration — du behöver inte längre `i += 1` (detta gör i ditt exempel inte vad du tror att det gör, och det gör inget som spelar någon roll öht här).

Dina kvarstående funderingar är relaterade till detta jag skrev:

Skrivet av phz:

Så som du har skrivit nu, där du har copy+pasteat in din ursprungliga loop för att få programmet att köra den igen, är inte speciellt smidigt. Vi programmerar ju bl a just för att undvika onödiga upprepningar. Låt säga att du skulle vilja ändra lite i loopen: ska du nu behöva hålla reda på två olika ställen i koden? Säg att du hade haft ett större program där du hade skrivit loopen på 15 ställen: skulle du manuellt behöva leta upp alla dessa?

Vad händer om du i din kod helt enkelt tar bort den första loopen, och bara behåller koden från och med `while True:`? Behöver du skriva din huvudloop två gånger?

Visa signatur

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

Permalänk

Skapa en metod av input saken och använd den, ex:

def funktion():
a = int(input("Skriv ett heltal: "))
b = int(input("Skriv ett till heltal: "))
for i in range(a, b+1):
print("{0}\t{1}".format(i,i*i))

Sen anropar du den med funktion() när man har svarat ja på "vill du göra det igen?"

EDIT: Fixat

Visa signatur

Bal-Sagoth | Ensiferum | Windir | Finntroll | Wintersun | Amon Amarth | Moonsorrow | Nazgûl

Permalänk
Skrivet av metalbast:

Skapa en metod av input saken och använd den, ex:

def funktion():
a = int(input("Skriv ett heltal: "))
b = int(input("Skriv ett till heltal: "))
for i in range(a, b+1):
print("{0}\t{1}".format(i,i*i))
i += 1

Sen anropar du den med funktion() när man har svarat ja på "vill du göra det igen?"

Skrev jag in def funktion fick jag bara: unexpected eof while parsing

Skrivet av Skuttokova:

Tänk lite på vad du vill göra när du skriver in J eller N

När jag skriver in J så vill jag att allt ska startas om så jag får skriva in 2 nya heltal. Men vet inte hur

Skrivet av phz:

Detta var mitt exempel på en for-loop i Python — enbart detta. For-loopen inkluderar steget att öka på `i` efter varje iteration — du behöver inte längre `i += 1` (detta gör i ditt exempel inte vad du tror att det gör, och det gör inget som spelar någon roll öht här).

Dina kvarstående funderingar är relaterade till detta jag skrev:

Jag har läst men jag förstår ej..

Permalänk
Skrivet av dLiinkz:

När jag skriver in J så vill jag att allt ska startas om så jag får skriva in 2 nya heltal. Men vet inte hur

Precis, men det du gör nu är att den kör två tal som du redan bestämt. Det du kan göra är att flytta upp din while-loop

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Skrivet av metalbast:

Skapa en metod av input saken och använd den, ex:

def funktion():
a = int(input("Skriv ett heltal: "))
b = int(input("Skriv ett till heltal: "))
for i in range(a, b+1):
print("{0}\t{1}".format(i,i*i))
i += 1

Sen anropar du den med funktion() när man har svarat ja på "vill du göra det igen?"

Skrivet av phz:

Detta var mitt exempel på en for-loop i Python — enbart detta. For-loopen inkluderar steget att öka på `i` efter varje iteration — du behöver inte längre `i += 1` (detta gör i ditt exempel inte vad du tror att det gör, och det gör inget som spelar någon roll öht här).

Dina kvarstående funderingar är relaterade till detta jag skrev:

Skrivet av Skuttokova:

Precis, men det du gör nu är att den kör två tal som du redan bestämt. Det du kan göra är att flytta upp din while-loop

Såhär ser det ut nu. Nu fungerar det!

a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) def funktion(): a = int(input("Skriv ett heltal: ")) b = int(input("Skriv ett till heltal: ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) while True: svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j'or svar == "Jajemensan" or svar == "Ja" or svar == "Yes" or svar == "Ja! Gör det": funktion() if svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

Hur gör jag så jag kan använda decimaltal i programmet? Är det med float? Går det att göra så programmet rabblar upp om jag skriver ett större tal först. Typ 55 sen 45 så den rabblar upp baklänges?

Permalänk

Råkade kopiera med i += 1 i mitt förra inlägg, för mycket kopiering från din kod
Sorry!

Visa signatur

Bal-Sagoth | Ensiferum | Windir | Finntroll | Wintersun | Amon Amarth | Moonsorrow | Nazgûl

Permalänk
Skrivet av metalbast:

Råkade kopiera med i += 1 i mitt förra inlägg, för mycket kopiering från din kod
Sorry!

Det gör inget, tack för hjälpen!

Permalänk
Hedersmedlem
Skrivet av dLiinkz:

Såhär ser det ut nu. Nu fungerar det!

Du skriver fortfarande din `for i in range`-loop två gånger. Du har ju nu skapat en funktion för detta: varför använder du inte bara din funktion även första gången du vill fråga användaren? Du ser också redan, trots att du bara har skrivit denna loop på två ställen, att dina meddelanden till användaren ser annorlunda ut på dessa olika ställen: tänk om du upprepa loopen på 15 ställen som jag sade tidigare. Det hade ju redan varit kaos!

Skriv din funktion högst upp i filen, så att du definierar den först. Det är ett vedertaget sätt att strukturera program på. Funktionen kommer inte skriva ut något förrän du explicit kallar på den.

Och kalla inte funktionen `funktion()`, utan döp den till något beskrivande. Det "händer" att man behöver mer än en funktion i ett program, och då är det dumt att namnet redan är upptaget. Dessutom blir det ju så mycket lättare att läsa om funktionen heter vad den faktiskt gör.

Sedan var inte min tanke med "Hur kommer programmet hantera om användaren svarar 'Jajamensan!'" att du skulle lägga till fler strängar att testa mot. Det är alldeles utmärkt att bara låta "j"/"J"/"n"/"N" vara giltiga svar iom att du explicit säger att "J/N" är hur du vill att användaren ska svara. Poängen är att programmet inte ska kollapsa bara för att användaren skriver något "oväntat". Om användaren skriver något som du inte godtar, så säg det och be användaren försöka igen.

Visa signatur

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

Permalänk
Skrivet av phz:

Du skriver fortfarande din `for i in range`-loop två gånger. Du har ju nu skapat en funktion för detta: varför använder du inte bara din funktion även första gången du vill fråga användaren? Du ser också redan, trots att du bara har skrivit denna loop på två ställen, att dina meddelanden till användaren ser annorlunda ut på dessa olika ställen: tänk om du upprepa loopen på 15 ställen som jag sade tidigare. Det hade ju redan varit kaos!

Om du vet hur man gör det skulle du kunna visa mig i kod alltså? Jag hade lektion idag och min lärare visste in hur man gjorde heller..

Skrivet av phz:

Skriv din funktion högst upp i filen, så att du definierar den först. Det är ett vedertaget sätt att strukturera program på. Funktionen kommer inte skriva ut något förrän du explicit kallar på den.

Hur kallar man på den? vilket kommando?

Skrivet av phz:

Och kalla inte funktionen `funktion()`, utan döp den till något beskrivande. Det "händer" att man behöver mer än en funktion i ett program, och då är det dumt att namnet redan är upptaget. Dessutom blir det ju så mycket lättare att läsa om funktionen heter vad den faktiskt gör.

Vet inte hur man döper en funktion.

Skrivet av phz:

Sedan var inte min tanke med "Hur kommer programmet hantera om användaren svarar 'Jajamensan!'" att du skulle lägga till fler strängar att testa mot. Det är alldeles utmärkt att bara låta "j"/"J"/"n"/"N" vara giltiga svar iom att du explicit säger att "J/N" är hur du vill att användaren ska svara. Poängen är att programmet inte ska kollapsa bara för att användaren skriver något "oväntat". Om användaren skriver något som du inte godtar, så säg det och be användaren försöka igen.

Det där har jag inte en aning om hur man gör.. Men jajemensan var bara för skojjs skull. Skulle du tänkt dig att hjälpa mig, visa via kod. Det är ingen uppgift längre.. Har redan lämnat in min.

Permalänk
Medlem

Du kallar ju på din funktion nu. Om användaren svarar "Ja".

Angående att döpa funktioner.

def detta_är_din_funktions_namn(parametrar):

som du i ditt fall deklarerat som (då din funktion inte tar några parametrar)

def funktion():

Permalänk
Skrivet av dLiinkz:

Om du vet hur man gör det skulle du kunna visa mig i kod alltså? Jag hade lektion idag och min lärare visste in hur man gjorde heller..

Testa ta bort allt över funktion() och lägg till funktion() längst ner

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Skrivet av Skuttokova:

Testa ta bort allt över funktion() och lägg till funktion() längst ner

Tar jag bort allt ovanför blir det ju inget kvar?

# Gjorde så programmet blev användarstyrt. a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) def funktion(): a = int(input("Skriv ett heltal: ")) b = int(input("Skriv ett till heltal: ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) while True: svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j'or svar == "Jajemensan" or svar == "Ja" or svar == "Yes" or svar == "Ja, Gör det!": funktion() if svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

Permalänk
Hedersmedlem
Skrivet av dLiinkz:

Tar jag bort allt ovanför blir det ju inget kvar?

# Gjorde så programmet blev användarstyrt. a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) def funktion(): a = int(input("Skriv ett heltal: ")) b = int(input("Skriv ett till heltal: ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) while True: svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j'or svar == "Jajemensan" or svar == "Ja" or svar == "Yes" or svar == "Ja, Gör det!": funktion() if svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

Men vad skadar det att testa? Du kan ju prova att kommentera bort det Skuttokova säger och se vad som händer.

Permalänk

Testa att ta bort den första for-loopen, och lägg till funktion() i början av while loopen

Visa signatur

Bal-Sagoth | Ensiferum | Windir | Finntroll | Wintersun | Amon Amarth | Moonsorrow | Nazgûl

Permalänk
Skrivet av metalbast:

Testa att ta bort den första for-loopen, och lägg till funktion() i början av while loopen

Såhär? Vet du vad jag måste göra för att programmet ska klara decimaltal? är det float?

a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') def funktion(): a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) while True: funktion() svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j': funktion() if svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

Permalänk

Använd . istället för , så ska det gå. Du har fortfarande dubbelt av din kod

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Skrivet av Skuttokova:

Använd . istället för , så ska det gå. Du har fortfarande dubbelt av din kod

Jag får det inte att fungera utan koden 2 gånger

Permalänk
Medlem

Vill bara säga, gott att se! Ser ut som att du knepar och klurar en del själv nu, och även om man inte alltid märker det så sitter man där nån vecka senare och kommer på att man lärt sig massor. Kämpa på!!

Visa signatur

Speldator :[I] AMD 5600X - 16GB fläskigt ram - AMD 580RX - AOC 32" Wide
HTPC : i5 3450S - 8GB G.Skill - Streacom F8

Permalänk
Skrivet av dLiinkz:

Jag får det inte att fungera utan koden 2 gånger

Visa hur du gör så kan vi få det sista att fungera också

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Skrivet av Skuttokova:

Visa hur du gör så kan vi få det sista att fungera också

Kan försöka förklara. Såhär blir det : http://prntscr.com/1zlh85 med koden: Då kommer inte siffrorna upp utan bara tabell och det, Men skriver jag in igen så köpper de fram.. http://prntscr.com/1zlhe6

a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') def funktion(): a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) while True: funktion() svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j': funktion() if svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

Permalänk
Skrivet av dLiinkz:

Kan försöka förklara. Såhär blir det : http://prntscr.com/1zlh85 med koden: Då kommer inte siffrorna upp utan bara tabell och det, Men skriver jag in igen så köpper de fram.. http://prntscr.com/1zlhe6

a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') def funktion(): a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) while True: funktion() svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j': funktion() if svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

Hur ser koden ut på det första screenshotet?

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Skrivet av Skuttokova:

Hur ser koden ut på det första screenshotet?

Koden är likadan på båda, först gången jag kör fungerar det ej. men andra fungerar Bild 2

Permalänk
Skrivet av dLiinkz:

Kan försöka förklara. Såhär blir det : http://prntscr.com/1zlh85 med koden: Då kommer inte siffrorna upp utan bara tabell och det, Men skriver jag in igen så köpper de fram.. http://prntscr.com/1zlhe6

a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') def funktion(): a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) while True: funktion() svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j': funktion() if svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

Hej, kan se att du har tagit input för dina tal både innanför och utanför din funktion, kan komplicera saker för dig då. Du skriver endast ut tabellhuvudet en gång i början av programmet, kanske vore trevligt att ha den i funktionen också. Samt ett annat litet problem är med din loop, du kallar funktionen två gånger om man svarar ja. Du kan lösa detta tex genom att flytta ut det första anropet utanför loopen.

ex

def funktion(): a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) print() funktion() while True: svar = input('Vill du köra programmet igen? (J/N) ') if svar == 'J' or svar == 'j': funktion() elif svar == 'N' or svar == 'n' or svar == 'Nej' or svar == "Nejtack" or svar == "Det räcker för idag!": break print('Ok då. Tack för idag!')

kan vara bra med felhantering om man skriver in ett icke tal. (ValueError som uppstår vid konverteringen till int.)
ex (1)

def funktion(): try: a = int(input("Skriv ett heltal (ej decimaltal): ")) b = int(input("Skriv ett till heltal (ej decimaltal): ")) print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) print() except ValueError: print('Du gav inte heltal.')

ex(2)
Man kan annars flytta ut input till en egen funktion, som kallar om sig självt om man ger fel input.

def HeltalInput(text = "Skriv ett heltal: "): try: t = int(input(text)) except ValueError: print("Inte ett heltal, försök igen.") t = HeltalInput(text) return t

då slipper man error i funktion. tex så här om man använder den:

def funktion(): a = HeltalInput("Skriv ett heltal (ej decimaltal): ") b = HeltalInput("Skriv ett till heltal (ej decimaltal): ") print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') for i in range(a, b+1): print("{0}\t{1}".format(i,i*i)) print()

hoppas det var till någon hjälp.

man kan också byta ut till flyttal relativt enkelt då, här är ett exempel:

def DecimalInput(text = "Skriv ett decimal tal: "): try: t = float(input(text)) except ValueError: print("Inte ett tal, försök igen.") t = DecimalInput(text) return t def funktionDecimal(): a = DecimalInput("Skriv det första decimal talet: ") b = DecimalInput("Skriv det sista decimal talet: ") c = DecimalInput("Hur stort steg mellan varje tal, ge ett decimal tal: ") print() print('Kvadrattabell') print('=============') print('Tal\tKvadrat') while a<b: print("{0:.5}\t{1:.7}".format(a,a*a)) a=a+c print("{0:.5}\t{1:.7}".format(b,b*b)) print()