FAQ

Programmeringsteknik

(Skillnad mellan versioner)
Hoppa till: navigering, sök
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 med strip
  • 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å.
    1. Kolla kolon(:) på raden innan
    2. Kolla så du tabbat in efter kolon(:)
    3. Kolla parantes () och klamrar [] på raden/tecknet innan
    4. kolla tabbar, även kommentarer med måste tabbas rätt! Matcha med det stycke ovan som ska ha samma intabbning.
    5. 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.

  1. 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
Den här artikeln är hämtad från http://wiki.math.se/wikis/dd100n_0701/index.php/FAQ
Personliga verktyg