Vinnaren i pepparkakshustävlingen!
2014-09-27, 04:53
  #1045
Medlem
Jag har ett skript där jag använder svenska tecken i strängar som visas när man kör det. När jag först la till åäö så slutade det fungera och jag fick följande felmeddelande:

SyntaxError: Non-ASCII character '\xc3' in file pythonlabben.py on line 6, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Jag förstår problemet och det fixade sig genom att lägga till # coding: utf-8 högst upp. Nu fungerar det perfekt i Linux där jag skriver koden. Jag testade sedan att öppna den i Windows och då är åäö förvridna till konstiga tecken. Varför tolkar Linux koden korrekt men inte Windows?

Jag antar att det har att göra med att Windows antar att det är en annan kodning än vad det faktiskt är och därför feltolkar åäö. Men, är inte hela tanken med att lägga till # coding: utf-8 att man berätta för Windows att utf-8 ska användas? Ignorerar Windows detta eller?
__________________
Senast redigerad av uffe123 2014-09-27 kl. 05:00.
Citera
2014-09-27, 09:48
  #1046
Moderator
vhes avatar
Citat:
Ursprungligen postat av uffe123
Jag antar att det har att göra med att Windows antar att det är en annan kodning än vad det faktiskt är och därför feltolkar åäö. Men, är inte hela tanken med att lägga till # coding: utf-8 att man berätta för Windows att utf-8 ska användas? Ignorerar Windows detta eller?

Vild gissning, då jag inte använder Windows, men det kan vara så att Windows konsol inte visar UTF-8. Jag antar att den per default är inställd på att visa CP-1252. Så även om Python hanterar dina UTF-8-tecken galant så kommer de, när de överlämnas till Windows konsolfönster för tolkning och rendering antas vara CP-1252 och därmed trasas sönder. Försök att antingen konvertera innan utskrift, eller övertyga Windows konsol att använda UTF-8. Du skulle få samma problem i Linux om du konfigurerade din terminal att använda, säg, ISO-8859-1 och spottade ut UTF-8 till den från Python.

Eller så har jag helt fel. Det är som sagt en gissning.
Citera
2014-09-27, 10:38
  #1047
Medlem
Citat:
Ursprungligen postat av vhe
Vild gissning, då jag inte använder Windows, men det kan vara så att Windows konsol inte visar UTF-8. Jag antar att den per default är inställd på att visa CP-1252. Så även om Python hanterar dina UTF-8-tecken galant så kommer de, när de överlämnas till Windows konsolfönster för tolkning och rendering antas vara CP-1252 och därmed trasas sönder.

Ja, svenska tecken blir knasiga i andra språk också, t.ex. ett vanligt C-program:

Kod:
#include <stdio.h>

int main(void) {
    (void) puts("åäö");
    return 0;
}

Kör chcp-kommandot i varje nystartat konsollfönster, ändra codepage globalt eller ladda hem en bättre konsoll än cmd.exe.
Citera
2014-09-29, 20:48
  #1048
Medlem
Tack för era svar. Det slutade med att jag nöjde mig med att det fungerade på Linux och lämnade in uppgiften
Citera
2014-10-01, 19:41
  #1049
Medlem
Behöver lite hjälp här!
Jag ska skriva en funktion för komplementet(mängdlära)

Jag ska kunna skriva in en mängd med element från 0,...,9 och få ut komplementet.
U = (0,1,2,3,4,5,6,7,8,9)

Jag är en extrem nybörjare så ursäkta om det är en väldigt enkel lösning.

Kod:
def comp(x):
    x=set()
    U = set(0,1,2,3,4,5,6,7,8,9)
    return U-x

Jag får:

Kod:
>>> comp({0,1,2,3,4})
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    comp({0,1,2,3,4})
  File "C:\Python34\Laboration 2.py", line 3, in comp
    U = set(0,1,2,3,4,5,6,7,8,9)
TypeError: set expected at most 1 arguments, got 10
Citera
2014-10-01, 22:40
  #1050
Moderator
vhes avatar
Citat:
Ursprungligen postat av Rekzi
Behöver lite hjälp här!
Jag ska skriva en funktion för komplementet(mängdlära)

Jag ska kunna skriva in en mängd med element från 0,...,9 och få ut komplementet.
U = (0,1,2,3,4,5,6,7,8,9)

Jag är en extrem nybörjare så ursäkta om det är en väldigt enkel lösning.

Kod:
def comp(x):
    x=set()
    U = set(0,1,2,3,4,5,6,7,8,9)
    return U-x

Jag får:

Kod:
>>> comp({0,1,2,3,4})
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    comp({0,1,2,3,4})
  File "C:\Python34\Laboration 2.py", line 3, in comp
    U = set(0,1,2,3,4,5,6,7,8,9)
TypeError: set expected at most 1 arguments, got 10

Du skapar ditt set på fel sätt (rim!).

Antingen anropar du funktionen set med en sekvens (t.ex. en lista), eller så definierar du den med måsvingeparanteser (tror jag det formella namnet är - krullisar, alltså).

Byt ut rad 3 mot en av följande:
Kod:
U = set([0,1,2,3,4,5,6,7,8,9])
Kod:
U = {0,1,2,3,4,5,6,7,8,9}
Citera
2014-10-14, 16:13
  #1051
Medlem
Tack för svaret!

Jag har problem med att skapa ett program som kan ta reda ifall talet är ett primtal.

Kod:
def primtal(tal):
    for d in range(2,tal):
        if d//tal == 0:
            return False
    return True

Jag får antingen att alla tal är primtal eller att inga tal är primtal.
Citera
2014-10-14, 18:51
  #1052
Medlem
ture.karlssons avatar
Citat:
Ursprungligen postat av Rekzi
Jag har problem med att skapa ett program som kan ta reda ifall talet är ett primtal.

Kod:
def primtal(tal):
    for d in range(2,tal):
        if d//tal == 0:
            return False
    return True

Jag får antingen att alla tal är primtal eller att inga tal är primtal.


Prova med detta i for-lopen:

Kod:
if tal % d == 0:
    return False;
Citera
2014-10-14, 19:51
  #1053
Medlem
Citat:
Ursprungligen postat av ture.karlsson
Prova med detta i for-lopen:

Kod:
if tal % d == 0:
    return False;

Det funkade nu! Tack!

Kod:
def recPower(a,n):
    # returns a raised to int power n
    if n == 0:
        return 1
    else:
        factor = recPower(a, n/2)
        if n % 2 == 0: # n is even
            return factor * factor
        else:
            return factor * factor * a

Jag ska prova exemplet i boken, men när jag kopierar in texten i Python så får jag ändå maximum recursion depth exceeded in comparison trots att jag har ett base case i början. Det står i boken att det här ska fungera.
Citera
2014-10-14, 20:22
  #1054
Medlem
ture.karlssons avatar
Citat:
Ursprungligen postat av Rekzi
Det funkade nu! Tack!

Glöm ej att hantera 0 och 1; de brukar inte räknas som primtal.
Citera
2014-10-14, 20:41
  #1055
Medlem
ture.karlssons avatar
Citat:
Ursprungligen postat av Rekzi
Kod:
def recPower(a,n):
    # returns a raised to int power n
    if n == 0:
        return 1
    else:
        factor = recPower(a, n/2)
        if n % 2 == 0: # n is even
            return factor * factor
        else:
            return factor * factor * a

Jag ska prova exemplet i boken, men när jag kopierar in texten i Python så får jag ändå maximum recursion depth exceeded in comparison trots att jag har ett base case i början. Det står i boken att det här ska fungera.

I allmänhet är "n / 2" inte ett heltal, så testet n == 0 kommer nästan alltid att vara falskt. Om uppgiften förutsätter att n är ett heltal kan du prova heltalsdivision (//) istället.

För övrigt är rekursion sällan en bra ide i Python.
Citera
2014-10-15, 18:32
  #1056
Medlem
ture.karlssons avatar
Citat:
Ursprungligen postat av Rekzi

Kod:
def recPower(a,n):
   ...

Jag ska prova exemplet i boken, men när jag kopierar in texten i Python så får jag ändå maximum recursion depth exceeded in comparison trots att jag har ett base case i början. Det står i boken att det här ska fungera.

Kolla om boken täcker Python 3. I Python 2 kan / användas för heltalsdivision. I Python 2 är t.ex. 3 / 2 == 1, medan 3.0 / 2 == 1.5.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback