FAQ
Programmeringsteknik
(Skillnad mellan versioner)
Versionen från 6 juli 2007 kl. 10.14 (redigera) KTH.SE:u1w7eri0 (Diskussion | bidrag) ← Gå till föregående ändring |
Nuvarande version (6 juli 2007 kl. 10.38) (redigera) (ogör) KTH.SE:u1ndpe5c (Diskussion | bidrag) |
||
(5 mellanliggande versioner visas inte.) | |||
Rad 2: | Rad 2: | ||
# '''Jag vill inte ha ny rad mellan min utskrifter. SVAR''': Skriv ett komma(,) efter print-satsen, t ex <code>print "Strumpor och",</code> | # '''Jag vill inte ha ny rad mellan min utskrifter. SVAR''': Skriv ett komma(,) efter print-satsen, t ex <code>print "Strumpor och",</code> | ||
- | # '''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) | + | # '''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> |
# '''Hur gör man formatterad utskrift? SVAR''': Exempel: | # '''Hur gör man formatterad utskrift? SVAR''': Exempel: | ||
#:<pre> | #:<pre> | ||
Rad 9: | Rad 9: | ||
#:</pre> | #:</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] | #: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] | ||
- | # '''Jag försöker skriva ut en rad streck med en slinga, men får mellanslag mellan varje tecken, så här - - - - -. Hur ska jag göra för att Python inte ska lägga in mellanslagen automatiskt? SVAR''': I modulen <code>sys</code> 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: | ||
- | ::<pre> | ||
- | ::import sys | ||
- | ::for i in range(5): | ||
- | :::print "-", | ||
- | :::sys.stdout.softspace = False</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. | # '''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> | # ''' 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> | ||
Rad 21: | Rad 15: | ||
## Har du tabbat in raderna efter kolon? | ## Har du tabbat in raderna efter kolon? | ||
## Saknas ett citattecken, en parentes <code>()</code> eller en klammer <code>[]</code> på raden innan? | ## Saknas ett citattecken, en parentes <code>()</code> eller en klammer <code>[]</code> på raden innan? | ||
- | ## Kolla tabbar, även kommentarer med <code>''' '''</code> 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. 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). | ||
Rad 33: | Rad 27: | ||
#: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" SVAR''': Har du kommit ihåg att skriva <code>self</code> framför alla förekomster av dina attribut? | ||
+ | # '''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: | ||
+ | ::<pre> | ||
+ | ::import sys | ||
+ | ::for i in range(5): | ||
+ | :::print "-", | ||
+ | :::sys.stdout.softspace = False</pre> |
Nuvarande version
[redigera] FAQ
- Jag vill inte ha ny rad mellan min utskrifter. SVAR: Skriv ett komma(,) efter print-satsen, t ex
print "Strumpor och",
- 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)
- Hur gör man formatterad utskrift? SVAR: Exempel:
- print " Sko Storlek Pris"
- print "%10s%8i%12.2f"%(skonamn,storlek,pris)
- 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å [1]
- 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
raden.strip()
- 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 tabbat in raderna efter kolon?
- Saknas ett citattecken, en parentes
()
eller en klammer[]
på raden innan? - Kolla tabbar, även kommentarer med tre
'
-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!
- "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). - 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()
- 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()
- 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.
- 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.
- 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? - 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:
- import sys
- for i in range(5):
- print "-",
- sys.stdout.softspace = False