FAQ
Programmeringsteknik
(Skillnad mellan versioner)
(→FAQ) |
|||
(46 mellanliggande versioner visas inte.) | |||
Rad 1: | Rad 1: | ||
- | + | # '''Jag vill inte ha ny rad mellan min utskrifter. | |
- | + | #:'''SVAR''': Ange att utskriften ska avslutas med ett mellanslag (istället för ett radavbrott), t ex | |
- | + | #:<pre>print("Strumpor och", end=" "):</pre> | |
- | + | # '''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: | |
- | + | #:<pre>print('{:<10}{:<8}{:<12}'.format('Sko', 'Storlek', 'Pris'))</pre> | |
- | + | #:<pre>print('{:<10}{:<8}{:<12}'.format(skonamn, storlek, pris))</pre> | |
- | + | #:Här är skonamn en sträng som skrivs ut i tio positioner, storlek skrivs ut i åtta positioner och pris skrivs ut i tolv positioner. | |
- | + | #:Dokumentation finns på [http://docs.python.org/release/3.1.3/library/string.html] | |
- | + | # '''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> | |
- | + | # '''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 <code>()</code> eller en klammer <code>[]</code> på raden innan? | |
- | + | ## 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! | |
- | + | # ''' "None" skrivs ut på skärmen. | |
- | <pre> | + | #:'''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). |
- | try: ... except SystemExit: | + | # ''' Nyckeln jag söker efter i en dictionary fungerar inte. |
- | </pre> | + | #:'''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 <code>raden.strip()</code> |
- | + | # ''' När jag läst in en rad från fil och skriver ut den på skärmen så skrivs en extra tomrad ut. | |
- | runt ditt anrop av main så slipper du den röda texten. | + | #:'''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: <code>raden = filen.readline()</code> skriver du: <code>raden = filen.readline.strip()</code> |
- | # '''Jag försöker skriva ut en rad streck med en slinga | + | # '''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 | |
- | + | #:<pre>try: ... except SystemExit:</pre> | |
- | + | #:runt ditt anrop av main så slipper du den röda texten. | |
- | men får mellanslag mellan varje tecken. Hur ska jag göra för att Python inte ska lägga in mellanslagen automatiskt?''' SVAR: | + | # '''Jag har skrivit en klass och får felmeddelandet "NameError: global name 'namn' is not defined" |
- | <pre> | + | #:'''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? | |
- | for i in range(5): | + | #:'''SVAR''': ange att utskriften ska avslutas med ett tomt tecken (istället för ett radavbrott) |
- | print "-", | + | ::<pre>for i in range(5): |
- | + | :::print("-",end="")</pre> | |
- | </pre> | + |
Nuvarande version
- Jag vill inte ha ny rad mellan min utskrifter.
- SVAR: Ange att utskriften ska avslutas med ett mellanslag (istället för ett radavbrott), t ex
print("Strumpor och", end=" "):
- 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))
- SVAR: Om du skriver ut både strängar och tal i samma print-sats kan du behöva konvertera talen till strängar:
- Hur gör man formatterad utskrift?
- SVAR: Exempel:
print('{:<10}{:<8}{:<12}'.format('Sko', 'Storlek', 'Pris'))
print('{:<10}{:<8}{:<12}'.format(skonamn, storlek, pris))
- Här är skonamn en sträng som skrivs ut i tio positioner, storlek skrivs ut i åtta positioner och pris skrivs ut i tolv positioner.
- 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()
- 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
- 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).
- SVAR: En funktion utan return-sats returnerar None. Troligen har du råkat anropa en sån funktion i en print-sats, t ex
- 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()
- 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
- 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()
- 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:
- 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?
- SVAR: Har du kommit ihåg att skriva
- 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: ange att utskriften ska avslutas med ett tomt tecken (istället för ett radavbrott)
for i in range(5):
- print("-",end="")