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?
-
Ăppna ett terminalfönster genom att vĂ€lja:
Applications -> Accessories -> Terminal
-
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
-
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.
-
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.
-
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
-
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!
-
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.
-
Plats för ny frÄga:
Svar:
Svar pÄ vanliga frÄgor om Labb 3
-
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)
-
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.
-
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.
-
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
-
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])
-
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.
-
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]
-
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.
-
Ska while-slingan i Andra versionen av programmet finnas med
bÄde i i huvudprogrammet och i
makechildren ?
Nej, bara i huvudprogrammet.
-
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.
-
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.
-
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.
-
Plats för ny frÄga:
Svar:
Labb 5
-
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.)
-
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)
-
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)
-
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)
-
Plats för ny frÄga:
Svar:
Labb 6
-
Plats för ny frÄga:
Svar:
Labb 7
-
Plats för ny frÄga:
Svar:
Felmeddelanden
-
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)
-
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!
-
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?
-
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!
-
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)
-
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.
-
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
-
Jag vill inte ha ny rad mellan min utskrifter.
Skriv ett komma(,) efter print-satsen, t ex
print "Strumpor och",
-
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
-
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()
-
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
-
Svar:
-
"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).
-
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()
-
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
-
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.
-
Plats för ny frćga:
Svar:
|