bild
Skolan för
elektroteknik
och datavetenskap

FAQ: Svar pć vanliga frćgor

Labb 1

  • Är det en PC? Eller Är det en Mac? Eller...
    De datorer som anvÀnds i kursen har operativsystemet Ubuntu (en variant av Linux). Titta lite pÄ lathunden, speciellt:
    • Kapitel 3 om Ubuntu
    • Kapitel 6 om Kommadoraden
    • Kapitel 8 om Emacs
    • Avsnitt 9.2 om Python
    • Avsnitt 10.3 om HjĂ€lp
    • Avsnitt 11.2 om rapp

  • Hur gör man för att skriva ut sitt program pĂ„ papper?
    1. Öppna ett terminalfönster genom att vĂ€lja:
      Applications -> Accessories -> Terminal

    2. Skriv ut med kommandot:
      lp -d Brun hej.py
      (byt ut Brun mot Gul/Orange/Röd för att nÄ respektive sals skrivare).



Svar pÄ vanliga frÄgor om Labb 2

  1. Vad ska det slutgiltiga programmet göra egentligen?
    Programmet ska simulera kortkonsten, dvs lÀsa in en rad i en kö och sedan plocka ut det första elementet ur kön, skriva ut det, plocka ut det andra ur kön och lÀgga det sist, och sÄ vidare tills kön tar slut.


  2. Jag har skrivit put() för kön men den fungerar inte. Vad ska jag göra?
    Rita upp hur det ser ut nÀr du stoppar in ett nytt element i kön. DÄ ser du vilka pekare som ska sÀttas om och i vilken ordning det ska göras.


  3. Hur skriver jag ut kön?
        def __str__(self):
            s = ""
            p = self.first
            while p != None:
                s = s + str(p.value)
                p = p.next
            return s
    



  4. NÀr jag sparat Queue-klassen i en egen fil och lagt till import-satsen överst i programmet sÄ fungerar det inte lÀngre!
    Svar: Om du skrivit from Queue import Queue sÄ kan du fÄ en annan kö-modul som finns i Pythons modul-bibliotek (den saknar isEmpty). Döp om filen dÀr klassen ligger till ListQfile sÄ ordnar det sig!


  5. Hej, har lite problem i uppgift 6 i labb 2 dÄ man ska rita en blomma. tkinter verkar klaga pÄ : "no display name and no $DISPLAY environment variable" Jag kör via PuTTY.
    Svar: University of Minnesota har en hjÀlpsida om hur man anvÀnder Xming för detta.


  6. Plats för ny frÄga:
    Svar:


Svar pÄ vanliga frÄgor om Labb 3

  1. NÀr jag skriver ut rader med ÄÀö i syns dom inte i IDLE (men om man markerar med musen kan man skymta dom).
    Det finns tvÄ olika versioner av filen, vÀlj utf-8 om du kör pÄ Ubuntu-datorerna i labbsalarna (Röd, Orange, Gul, Grön, Brun)


  2. Det hÀr rad[0:3] fungerar inte med ÄÀö, finns det nÄgot annat sÀtt att bli av med returtecknet?
    Ja, skriv rad.strip() istÀllet.


  3. Varför mÄste putta returnera p?
    Enda sÀttet att fÄ ut ett Àndrat vÀrde ur en funktion Àr att returnera det!
    TrÀdet Àr ju tomt frÄn början (None) och nÀr vi stoppat in ett vÀrde har roten Àndrats. NÀr vi gör rekursiva anrop med deltrÀd kommer vi sÄ smÄningom ocksÄ till ett tomt deltrÀd dÀr den nya noden ska in. Rita trÀd pÄ papper sÄ ser du lÀttare vad som ska göras.


  4. Min hitta-funktion ger alltid svaret True, Àven nÀr vi söker efter nÄt som inte finns i trÀdet.
    • Har du tĂ€nkt pĂ„ basfallet - vad ska returneras om trĂ€det Ă€r tomt?
    • Vad hĂ€nder med vĂ€rdet som kommer tillbaka frĂ„n ett rekursivt anrop?



Svar pÄ vanliga frÄgor om Labb 4

  1. Vi fÄr problem med ÄÀö nÀr vi byter ut en bokstav i taget. HÀr Àr ett exempel:
    #-*- coding: utf-8 -*-
    ettOrd = 'f' + 'ö' + 'n'
    print ettOrd
    print ettOrd[0]
    print ettOrd[1]
    print ettOrd[2]
    

    Det verkar vara en teckentolkningsbugg i Python nÀr man plockar ut enskilda tecken ur en strÀng! Konvertera strÀngen till Unicode (med decode) först, sÄ gÄr det bÀttre.
    #-*- coding: utf-8 -*-
    ettOrd = ('f' + 'ö' + 'n').decode('utf-8')
    print ettOrd
    print ettOrd[0]
    print ettOrd[1]
    print ettOrd[2]
    print ettOrd[0]+ettOrd[1]+ettOrd[2])
    



  2. Jag anvÀnder sys.exit() för att avbryta programmet, men dÄ fÄr jag en massa röd text i IDLE.
    LĂ€gg in en
    try: ... except SystemExit:
    runt ditt anrop av main sÄ slipper du den röda texten.


  3. Hur byter man ut en bokstav i taget?
    En strÀng gÄr inte att Àndra pÄ, sÄ ordet[0] = bokstav fungerar inte. IstÀllet kan man skapa en ny strÀng genom att konkatenera delarna:
    ordet = bokstav + ordet[1:3]


  4. Jag har gjort Första versionen av labb 4 och mitt program skriver ut sjutton söner. Men "gud" finns inte med bland dom. Vad har jag gjort för fel?
    I första versionen skriver du bara ut den första nivÄn i problemtrÀdet, alltsÄ alla olika sÀtt att byta ut en bokstav i ordet "fan". Eftersom "fan" och "gud" inte har nÄgra gemensamma bokstÀver rÀcker det inte att byta ut en bokstav, dÀrför finns inte "gud" med pÄ första nivÄn i problemtrÀdet.


  5. Ska while-slingan i Andra versionen av programmet finnas med bÄde i i huvudprogrammet och i makechildren?
    Nej, bara i huvudprogrammet.


  6. MÄste man Àndra Queue-klassen nÀr man gör Tredje versionen av programmet?
    Nej, man ska inte Àndra Queue-klassen. Den kan ju ta emot vilken sorts data som helst, och hÀr ska man stoppa in noder istÀllet för bara ord.


  7. I makesons(ordet) vill jag sÀtta parent-pekaren till förÀldranoden, men det gÄr inte eftersom jag bara fÄr in strÀngen "ordet" som parameter. som
    NÀr du har kommit sÄ hÀr lÄngt Àr det ju noder du plockar ut ur kön. Skicka med hela noden som parameter till makesons istÀllet för bara ordet.


  8. Jag har skrivit "from Queue import Queue" för att hÀmta in min kö frÄn labb2, men det verkar inte som om den hittar "isEmpty()"? Metoderna put() och get() fungerar som dom ska. Obs! Jag kör pÄ min egen bÀrbara dator.
    PÄ din egen dator (t ex i Windows XP) kan det vara sÄ att Python tittar i den fördefinierade modulen Queue istÀllet för att titta i filen Queue.py som du har skrivit. Byt namn pÄ filen till queue.py (eller nÄgot annat) sÄ ordnar det sig.


  9. Plats för ny frÄga:
    Svar:


Labb 5

  1. Det verkar inte som om h^2 fungerar?
    Det Àr riktigt, ^ betyder inte "upphöjt till" i Python. AnvÀnd multiplikation (h*h) istÀllet. (Upphöjt till finns annars i math-modulen och heter pow.)


  2. NÀr jag kör andra delen av labb 5 (grafiken) sÄ kommer det inte upp nÄgot grafikfönster. Jag anvÀnder idle.
    Idle anvÀnder ocksÄ Tkinter för grafiken! Prova att lÀgga in satsen
      mainloop()
    
    efter mg.show(r)

    Eller kör programmet med kommandot
      python lab5.py
    
    direkt i terminalfönstret (eller DOS-fönstret/konsolfönstret)


  3. I DrPython kommer det bara upp ett grÄtt TKinterfönster.
    Svar: Kör programmet med kommandot
      python lab5.py
    
    direkt i terminalfönstret (eller DOS-fönstret/konsolfönstret)


  4. NÀr jag Àndrat i filen hashtable.py och kör labb5.py (dÀr jag importerar hashtable) sÄ tar inte Idle med mina Àndringar.
    Svar: Ge följande kommandon i Shell-fönstret:
    >>>import hashtable
    >>>reload(hashtable)



  5. Plats för ny frÄga:
    Svar:


Labb 6

  1. Plats för ny frÄga:
    Svar:


Labb 7

  1. Plats för ny frÄga:
    Svar:


Felmeddelanden

  1. När jag testar mitt program i Python v. 2.6.1, funkar det utan problem. Med den version som finns pć skolans Windowsdator (v.3.1.) fćr jag följande felmeddelande:
      File "test2.py", line 38
        print x
              ^
    SyntaxError: invalid syntax
    
    Vad kan detta bero pć?

    I senaste versionen av Python kräver print-satserna parenterser, dvs man mćste skriva:
    print(x)

  2. Andra fall av felmeddelandet "invalid_syntax"
    Om du inte ser felet direkt kan felet vara pć raden innan.
    • 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!


  3. Jag har skrivit en klass och fćr felmeddelandet "NameError: global name 'namn' is not defined"
    Har du kommit ihćg att skriva self framför alla förekomster av dina attribut?


  4. Felmeddelandet "TypeError: 'int' object is not callable"
    eller "TypeError: 'str' object is not callable"

    Om du har definierat en klass kan detta felmeddelande bero pć att ett attribut har samma namn som en metod. Byt namn pć metoden!


  5. Felmeddelandet "TypeError: cannot concatenate 'str'and int'objects"
    Om du skriver ut bćde strängar och tal i samma print-sats ska du konvertera talen till strängar sć här:
    print frukten + " kostar " + str(pris)


  6. Felmeddelandet "TypeError: sort() takes no keyword arguments"
    när du försöker sortera en lista med objekt.

    Kör du en gammal version av Python? Sortering med "key" finns i Python 2.4 och senare.


  7. Felmeddelandet "Already executing"
    När du kör program frćn IDLE kan du avbryta en gammal körning med Ctrl-C innan du kör programmet igen.


Utskrift med print

  1. Jag vill inte ha ny rad mellan min utskrifter.
    Skriv ett komma(,) efter print-satsen, t ex
    print "Strumpor och",


  2. 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 ---. Hur ska jag göra för att Python inte ska lägga in mellanslagen automatiskt?
    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
    

  3. När jag läst in en rad frćn fil och skriver ut den pć skärmen sć skrivs en extra tomrad ut.
    Varje rad du läser in frćn filen 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()


  4. Hur gör man formatterad utskrift?
    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).
    Per Sedholm har gjort en urförligare beskrivning av formatterad utskrift.
    (Officiell dokumentation pć engelska finns pć http://docs.python.org/lib/typesseq-strings.html.)

Andra fel


  1. Svar:


  2. "None" skrivs ut pć skärmen.
    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).


  3. Min if-sats fungerar inte som den ska.
    Felet kan bero pć:
    • Att datatyperna inte stämmer överens, till exempel är strängen "1" inte detsamma som heltalet 1.
    • Om du läst in rader frćn en fil som du jämför i if-satsen kan problemet vara ett "\n" sist i den inlästa raden. Städa bort det med raden.strip()


  4. Nyckeln jag söker efter i en dictionary fungerar inte.
    Om du läst in nycklarna frćn en fil kan det vara ett "\n" sist i den inlästa raden som mćste städas bort med strip


  5. När jag läser in filen sć läses inget in, men det har fungerat förut.
    Kontrollera att filen finns. Öppna filen (med t ex WordPad) och kolla sć den innehćller nćgot. Spara och stäng filen igen.


  6. Plats för ny frćga:
    Svar:


Copyright © Sidansvarig: Linda Kann <linda@nada.kth.se>
Uppdaterad 2013-01-02