FAQ

Programmeringsteknik

(Skillnad mellan versioner)
Hoppa till: navigering, sök
Nuvarande version (5 april 2012 kl. 16.11) (redigera) (ogör)
 
(En mellanliggande version visas inte.)
Rad 1: Rad 1:
-
 
+
# '''Jag vill inte ha ny rad mellan min utskrifter.
-
# '''Jag vill inte ha ny rad mellan min utskrifter. SVAR''': Skriv ett komma(,) efter print-satsen, t ex <code>print "Strumpor och",</code>
+
#:'''SVAR''': Ange att utskriften ska avslutas med ett mellanslag (istället för ett radavbrott), t ex
-
# '''Felmeddelandet "TypeError: cannot concatenate 'str' and 'int' objects" SVAR''': Om du skriver ut både strängar och tal i samma print-sats kan du behöva konvertera talen till strängar: <code>print frukten + " kostar " + str(pris)</code>
+
#:<pre>print("Strumpor och", end=" "):</pre>
-
# '''Hur gör man formatterad utskrift? SVAR''': Exempel:
+
# '''Felmeddelandet "TypeError: cannot concatenate 'str' and 'int' objects"
-
#:<pre>
+
#:'''SVAR''': Om du skriver ut både strängar och tal i samma print-sats kan du behöva konvertera talen till strängar: <code>print(frukten + " kostar " + str(pris))</code>
-
#:print " Sko Storlek Pris"
+
# '''Hur gör man formatterad utskrift?
-
#:print "%10s%8i%12.2f"%(skonamn,storlek,pris)
+
#:'''SVAR''': Exempel:
-
#:</pre>
+
#:<pre>print('{:<10}{:<8}{:<12}'.format('Sko', 'Storlek', 'Pris'))</pre>
-
#:Här är skonamn en sträng som skrivs ut i tio positioner (%10s), storlek ett heltal som skrivs ut i åtta positioner (%8i) och pris ett flyttal som skrivs ut i tolv positioner med två decimaler (%12.2f). Dokumentation finns på [http://docs.python.org/lib/typesseq-strings.html]
+
#:<pre>print('{:<10}{:<8}{:<12}'.format(skonamn, storlek, pris))</pre>
-
# '''Felfönstret "Already executing" dyker upp. SVAR''': När du kör program från IDLE tänk på att avbryta en gammal körning (t ex med ctrl+c) innan du kör programmet igen.
+
#:Här är skonamn en sträng som skrivs ut i tio positioner, storlek skrivs ut i åtta positioner och pris skrivs ut i tolv positioner.
-
# ''' En if-sats fungerar inte. SVAR''': Tänk på att använda rätt datatyper. En sträng med en etta "1" är inte samma som heltalet 1. Om du läst in rader från en fil och jämför med dem i if-satsen kan problemet vara ett "\n" sist i den inlästa raden som måste städas bort med <code>raden.strip()</code>
+
#:Dokumentation finns på [http://docs.python.org/release/3.1.3/library/string.html]
-
# '''Felmeddelandet "invalid_syntax" SVAR''': Om du inte ser felet direkt kan det vara raden innan som är fel.
+
# '''Felfönstret "Already executing" dyker upp.
 +
#:'''SVAR''': När du kör program från IDLE tänk på att avbryta en gammal körning (t ex med ctrl+c) innan du kör programmet igen.
 +
# ''' En if-sats fungerar inte.
 +
#:'''SVAR''': Tänk på att använda rätt datatyper. En sträng med en etta "1" är inte samma som heltalet 1. Om du läst in rader från en fil och jämför med dem i if-satsen kan problemet vara ett "\n" sist i den inlästa raden som måste städas bort med <code>raden.strip()</code>
 +
# '''Felmeddelandet "invalid_syntax"
 +
#:'''SVAR''': Om du inte ser felet direkt kan det vara raden innan som är fel.
## Har du glömt kolon(:) på raden innan om du använder if, while eller for?
## Har du glömt kolon(:) på raden innan om du använder if, while eller for?
## Har du tabbat in raderna efter kolon?
## Har du tabbat in raderna efter kolon?
Rad 16: Rad 21:
## Kolla tabbar, även kommentarer med tre <code>'</code>-tecken måste tabbas rätt! Matcha med det stycke ovan som ska ha samma intabbning.
## Kolla tabbar, även kommentarer med tre <code>'</code>-tecken måste tabbas rätt! Matcha med det stycke ovan som ska ha samma intabbning.
## Python har rätt, det finns ett fel någonstans!
## Python har rätt, det finns ett fel någonstans!
-
# ''' "None" skrivs ut på skärmen. SVAR''': En funktion utan return-sats returnerar None. Troligen har du råkat anropa en sån funktion i en print-sats, t ex <code>print skriv_ut()</code> Lösningen är att anropa funktionen utan print (eller låta funktionen returnera den sträng som ska skrivas ut).
+
# ''' "None" skrivs ut på skärmen.
-
# ''' Nyckeln jag söker efter i en dictionary fungerar inte. SVAR''': Om du läst in nycklarna från en fil kan problemet vara ett "\n" sist i den inlästa raden som måste städas bort med <code>raden.strip()</code>
+
#:'''SVAR''': En funktion utan return-sats returnerar None. Troligen har du råkat anropa en sån funktion i en print-sats, t ex <code>print(skriv_ut())</code> Lösningen är att anropa funktionen utan print (eller låta funktionen returnera den sträng som ska skrivas ut).
-
# ''' När jag läst in en rad från fil och skriver ut den på skärmen så skrivs en extra tomrad ut. SVAR''': Varje rad du läser in från filrn har ett radbrytningtecken "\n" i slutet. Du får enklast bort detta genom att på varje rad du läser från filen använda funktionen strip(). I stället för: <code>raden = filen.readline()</code> skriver du: <code>raden = filen.readline.strip()</code>
+
# ''' Nyckeln jag söker efter i en dictionary fungerar inte.
-
# '''När jag läser in filen så läses inget in, men det har fungerat förut. SVAR''': Kontrollera att filen finns. Öppna filen (med t ex WordPad) och kolla så den innehåller något. Spara och stäng filen igen.
+
#:'''SVAR''': Om du läst in nycklarna från en fil kan problemet vara ett "\n" sist i den inlästa raden som måste städas bort med <code>raden.strip()</code>
-
# '''Jag använder sys.exit() för att avbryta programmet, men då får jag en massa röd text i IDLE. SVAR''': Lägg in en
+
# ''' När jag läst in en rad från fil och skriver ut den på skärmen så skrivs en extra tomrad ut.
-
#:<pre>
+
#:'''SVAR''': Varje rad du läser in från filrn har ett radbrytningtecken "\n" i slutet. Du får enklast bort detta genom att på varje rad du läser från filen använda funktionen strip(). I stället för: <code>raden = filen.readline()</code> skriver du: <code>raden = filen.readline.strip()</code>
-
#:try: ... except SystemExit:
+
# '''När jag läser in filen så läses inget in, men det har fungerat förut.
-
#:</pre>
+
#:'''SVAR''': Kontrollera att filen finns. Öppna filen (med t ex WordPad) och kolla så den innehåller något. Spara och stäng filen igen.
 +
# '''Jag använder sys.exit() för att avbryta programmet, men då får jag en massa röd text i IDLE.
 +
#:'''SVAR''': Lägg in en
 +
#:<pre>try: ... except SystemExit:</pre>
#:runt ditt anrop av main så slipper du den röda texten.
#:runt ditt anrop av main så slipper du den röda texten.
-
# '''Jag har skrivit en klass och får felmeddelandet "NameError: global name 'namn' is not defined" SVAR''': Har du kommit ihåg att skriva <code>self</code> framför alla förekomster av dina attribut?
+
# '''Jag har skrivit en klass och får felmeddelandet "NameError: global name 'namn' is not defined"
-
# '''Jag försöker skriva ut en rad streck med en slinga, men får mellanslag mellan varje tecken, så här - - -, istället för det jag vill ha ---. Hur ska jag göra för att Python inte ska lägga in mellanslagen automatiskt? SVAR''': I modulen sys finns en variabel som inför varje print håller reda på om ett mellanslag ska skrivas ut eller inte. Man kan själv ställa om variabeln så här:
+
#:'''SVAR''': Har du kommit ihåg att skriva <code>self</code> framför alla förekomster av dina attribut?
-
::<pre>
+
# '''Jag försöker skriva ut en rad streck med en slinga, men får mellanslag mellan varje tecken, så här - - -, istället för det jag vill ha ---. Hur ska jag göra för att Python inte ska lägga in mellanslagen automatiskt?
-
::import sys
+
#:'''SVAR''': ange att utskriften ska avslutas med ett tomt tecken (istället för ett radavbrott)
-
::for i in range(5):
+
::<pre>for i in range(5):
-
:::print "-",
+
:::print("-",end="")</pre>
-
:::sys.stdout.softspace = False</pre>
+

Nuvarande version

  1. Jag vill inte ha ny rad mellan min utskrifter.
    SVAR: Ange att utskriften ska avslutas med ett mellanslag (istället för ett radavbrott), t ex
    print("Strumpor och", end=" "):
  2. Felmeddelandet "TypeError: cannot concatenate 'str' and 'int' objects"
    SVAR: Om du skriver ut både strängar och tal i samma print-sats kan du behöva konvertera talen till strängar: print(frukten + " kostar " + str(pris))
  3. Hur gör man formatterad utskrift?
    SVAR: Exempel:
    print('{:<10}{:<8}{:<12}'.format('Sko', 'Storlek', 'Pris'))
    print('{:<10}{:<8}{:<12}'.format(skonamn, storlek, pris))
    Här är skonamn en sträng som skrivs ut i tio positioner, storlek skrivs ut i åtta positioner och pris skrivs ut i tolv positioner.
    Dokumentation finns på [1]
  4. Felfönstret "Already executing" dyker upp.
    SVAR: När du kör program från IDLE tänk på att avbryta en gammal körning (t ex med ctrl+c) innan du kör programmet igen.
  5. En if-sats fungerar inte.
    SVAR: Tänk på att använda rätt datatyper. En sträng med en etta "1" är inte samma som heltalet 1. Om du läst in rader från en fil och jämför med dem i if-satsen kan problemet vara ett "\n" sist i den inlästa raden som måste städas bort med raden.strip()
  6. Felmeddelandet "invalid_syntax"
    SVAR: Om du inte ser felet direkt kan det vara raden innan som är fel.
    1. Har du glömt kolon(:) på raden innan om du använder if, while eller for?
    2. Har du tabbat in raderna efter kolon?
    3. Saknas ett citattecken, en parentes () eller en klammer [] på raden innan?
    4. Kolla tabbar, även kommentarer med tre '-tecken måste tabbas rätt! Matcha med det stycke ovan som ska ha samma intabbning.
    5. Python har rätt, det finns ett fel någonstans!
  7. "None" skrivs ut på skärmen.
    SVAR: En funktion utan return-sats returnerar None. Troligen har du råkat anropa en sån funktion i en print-sats, t ex print(skriv_ut()) Lösningen är att anropa funktionen utan print (eller låta funktionen returnera den sträng som ska skrivas ut).
  8. Nyckeln jag söker efter i en dictionary fungerar inte.
    SVAR: Om du läst in nycklarna från en fil kan problemet vara ett "\n" sist i den inlästa raden som måste städas bort med raden.strip()
  9. När jag läst in en rad från fil och skriver ut den på skärmen så skrivs en extra tomrad ut.
    SVAR: Varje rad du läser in från filrn har ett radbrytningtecken "\n" i slutet. Du får enklast bort detta genom att på varje rad du läser från filen använda funktionen strip(). I stället för: raden = filen.readline() skriver du: raden = filen.readline.strip()
  10. När jag läser in filen så läses inget in, men det har fungerat förut.
    SVAR: Kontrollera att filen finns. Öppna filen (med t ex WordPad) och kolla så den innehåller något. Spara och stäng filen igen.
  11. Jag använder sys.exit() för att avbryta programmet, men då får jag en massa röd text i IDLE.
    SVAR: Lägg in en
    try: ... except SystemExit:
    runt ditt anrop av main så slipper du den röda texten.
  12. Jag har skrivit en klass och får felmeddelandet "NameError: global name 'namn' is not defined"
    SVAR: Har du kommit ihåg att skriva self framför alla förekomster av dina attribut?
  13. Jag försöker skriva ut en rad streck med en slinga, men får mellanslag mellan varje tecken, så här - - -, istället för det jag vill ha ---. Hur ska jag göra för att Python inte ska lägga in mellanslagen automatiskt?
    SVAR: ange att utskriften ska avslutas med ett tomt tecken (istället för ett radavbrott)
for i in range(5): 
print("-",end="")