FAQ
Programmeringsteknik
(Skillnad mellan versioner)
Versionen från 2 juli 2007 kl. 13.14 (redigera) KTH.SE:u1xsetv1 (Diskussion | bidrag) (→FAQ) ← Gå till föregående ändring |
Versionen från 2 juli 2007 kl. 13.23 (redigera) (ogör) KTH.SE:u1xsetv1 (Diskussion | bidrag) (→FAQ) Gå till nästa ändring → |
||
Rad 1: | Rad 1: | ||
==FAQ== | ==FAQ== | ||
- | # '''...is still running... SVAR''': När du kör program från IDLE tänk på att avbryta en gammal körning innan du kör programmet igen. Tex går ctrl+c att använda innan en ny körning av programmet! | + | * '''...is still running... SVAR''': När du kör program från IDLE tänk på att avbryta en gammal körning innan du kör programmet igen. Tex går ctrl+c att använda innan en ny körning av programmet! |
- | # '''Jag vill inte ha ny rad mellan min utskrifter. SVAR''': Skriv till ett komma(,) efter print-satsen, t ex <code>print "här skrivs något ut",</code> | + | * '''Jag vill inte ha ny rad mellan min utskrifter. SVAR''': Skriv till ett komma(,) efter print-satsen, t ex <code>print "här skrivs något ut",</code> |
- | # ''' "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). |
- | # ''' En extra tom rad skrivs ut som jag inte vill ha! SVAR''': Läser du in data från en fil? Tänk på att varje rad du läser in innehåller 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> | + | * ''' En extra tom rad skrivs ut som jag inte vill ha! SVAR''': Läser du in data från en fil? Tänk på att varje rad du läser in innehåller 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> |
- | # ''' En if-sats fungerar inte. SVAR''': Tänk på att använda rätt datatyper. <code>"1" != 1</code> , dvs en sträng med en etta är inte samma som en heltal med en etta. Om du läst in rader från en fil och du använder de variablerna i if-satser kan det vara samma problem som i tomradsfrågan ovan, alltså ett "\n" sist i variabeln som måste städas bort med <code>strip</code> | + | * ''' En if-sats fungerar inte. SVAR''': Tänk på att använda rätt datatyper. <code>"1" != 1</code> , dvs en sträng med en etta är inte samma som en heltal med en etta. Om du läst in rader från en fil och du använder de variablerna i if-satser kan det vara samma problem som i tomradsfrågan ovan, alltså ett "\n" sist i variabeln som måste städas bort med <code>strip</code> |
- | # ''' En nyckel som finns i en dictionary fungerar inte.''' SVAR: Om du läst in nycklarna från en fil kan det vara samma problem som i tomrads frågan ovan, alltså ett "\n" som ligger sist i nyckeln och måste städas bort med <code>strip</code> | + | * ''' En nyckel som finns i en dictionary fungerar inte.''' SVAR: Om du läst in nycklarna från en fil kan det vara samma problem som i tomrads frågan ovan, alltså ett "\n" som ligger sist i nyckeln och måste städas bort med <code>strip</code> |
- | # '''invalid_syntax''' SVAR: Då är det ofta tecknet/raden innan som det är fel på. | + | * '''invalid_syntax''' SVAR: Då är det ofta tecknet/raden innan som det är fel på. |
- | ## Kolla kolon(:) på raden innan | + | *# Kolla kolon(:) på raden innan |
- | ## Kolla så du tabbat in efter kolon(:) | + | *# Kolla så du tabbat in efter kolon(:) |
- | ## Kolla parantes <code>()</code> och klamrar <code>[]</code> på raden/tecknet innan | + | *# Kolla parantes <code>()</code> och klamrar <code>[]</code> på raden/tecknet 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 <code>''' '''</code> måste tabbas rätt! Matcha med det stycke ovan som ska ha samma intabbning. |
- | ## Det är fel tabbat! python har rätt! | + | *# Det är fel tabbat! python har rätt! |
- | # '''can't concatenate str and int 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) | + | * '''can't concatenate str and int 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) |
- | # '''När jag läser in filen så läses inget in, men det har fungerat förut.''': Öppna filen i WordPad och kolla så den innehåller något. Spara och stäng filen igen. | + | * '''När jag läser in filen så läses inget in, men det har fungerat förut.''': Öppna filen i WordPad och kolla så den innehåller något. Spara och stäng filen igen. |
- | # '''Hur gör man formaterad utskrift? SVAR''': Exempel: | + | * '''Hur gör man formaterad utskrift? SVAR''': Exempel: |
- | <pre> | + | *:<pre> |
- | print " Sko Storlek Pris"; | + | *:print " Sko Storlek Pris"; |
- | print "%10s%8i%12.2f"%(skonamn,storlek,pris) | + | *:print "%10s%8i%12.2f"%(skonamn,storlek,pris) |
- | </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 använder sys.exit() för att avbryta programmet, men då får jag enmassa röd text i IDLE. SVAR''': Lägg in en | + | * '''Jag använder sys.exit() för att avbryta programmet, men då får jag enmassa röd text i IDLE. SVAR''': Lägg in en |
<pre> | <pre> | ||
try: ... except SystemExit: | try: ... except SystemExit: |
Versionen från 2 juli 2007 kl. 13.23
FAQ
- ...is still running... SVAR: När du kör program från IDLE tänk på att avbryta en gammal körning innan du kör programmet igen. Tex går ctrl+c att använda innan en ny körning av programmet!
- Jag vill inte ha ny rad mellan min utskrifter. SVAR: Skriv till ett komma(,) efter print-satsen, t ex
print "här skrivs något 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
print skriv_ut()
Lösningen är att anropa funktionen utan print (eller låta funktionen returnera den sträng som ska skrivas ut). - En extra tom rad skrivs ut som jag inte vill ha! SVAR: Läser du in data från en fil? Tänk på att varje rad du läser in innehåller 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()
- En if-sats fungerar inte. SVAR: Tänk på att använda rätt datatyper.
"1" != 1
, dvs en sträng med en etta är inte samma som en heltal med en etta. Om du läst in rader från en fil och du använder de variablerna i if-satser kan det vara samma problem som i tomradsfrågan ovan, alltså ett "\n" sist i variabeln som måste städas bort medstrip
- En nyckel som finns i en dictionary fungerar inte. SVAR: Om du läst in nycklarna från en fil kan det vara samma problem som i tomrads frågan ovan, alltså ett "\n" som ligger sist i nyckeln och måste städas bort med
strip
- invalid_syntax SVAR: Då är det ofta tecknet/raden innan som det är fel på.
- Kolla kolon(:) på raden innan
- Kolla så du tabbat in efter kolon(:)
- Kolla parantes
()
och klamrar[]
på raden/tecknet innan - kolla tabbar, även kommentarer med
- Det är fel tabbat! python har rätt!
- can't concatenate str and int 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)
- När jag läser in filen så läses inget in, men det har fungerat förut.: Öppna filen i WordPad och kolla så den innehåller något. Spara och stäng filen igen.
- Hur gör man formaterad 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]
- Jag använder sys.exit() för att avbryta programmet, men då får jag enmassa 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 försöker skriva ut en rad streck med en slinga:
for i in range(5):; print "-",
men får mellanslag mellan varje tecken. 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