Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008
Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b =", b a = 15 b = 15 >>> b=b+1 >>> print "a =", a, "b =", b a = 15 b = 16 >>> ^D Bra för enkla beräkningar Bra för att testa vad olika kommandon gör Dåligt för att skriva långa program
Man kan även skriva sitt program i en fil exempel1.py och köra hela programmet med kommandot python exempel1.py # This program converts SEK to EURO kr = 2008 kurs = 9.84 euro = kr/kurs print kr, "kronor =", euro, "euro" tcs-ray:~/grudat08>python exempel1.py 2008 kronor = 204.06504065 euro Det hör till god programmeringstil att kommentera sina program. En kommentar i python börjar med # och fortsätter till slutet på raden.
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner Variabler behöver inte deklareras i python En variabel är en egentligen en referens till data En variabler kan referera till vilken datatyp som helst Listor kan vara heterogena dvs. innehålla element av olika typ. >>> a=15 >>> a 15 >>> a='hej' >>> a 'Hej'
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner Variabler måste tilldelas ett värde innan de kan användas >>> a=15 15 >>> a=c Traceback (most recent call last): File "<stdin>", line 1, in? NameError: name 'c' is not defined Flyttal och heltal är olika typer och kan ge olika resultat t.ex. vid division >>> 15/10 1 >>> 15.0/10 1.5
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner Strängar omsluts av (enkla eller dubbla) citationstecken Listor omsluts av hakparenteser [] och elementen separeras med kommatecken Man refererar till element nummer i i en sträng eller lista med l[i]. Man refererar till en delsträng eller dellista med l[i:j] >>> s="abcdef" >>> s[1] 'b' >>> s[1:4] 'bcd' >>> l=[6,5,4,3,2,1] >>> l[2] 4 >>> l[1:4] [5, 4, 3]
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner Tänk på att variabelnamn är referenser. Två variabler kan referera till samma lista Tänk på att l[i:j] är en referens som kan tilldelas, men att det även ändrar i den ursprungliga listan >>> l=[5,4,3,2,1] >>> m=l >>> print "l =", l, "m =", m l = [5, 4, 3, 2, 1] m = [5, 4, 3, 2, 1] >>> m[2]="error" >>> print "l =", l, "m =", m l = [5, 4, 'Error', 2, 1] m = [5, 4, 'Error', 2, 1] >>> l=[5,4,3,2,1] >>> l[1:4] = [7,8,9] >>> l [5, 7, 8, 9, 1]
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner I Python använder man if-elif-else satser för exekvera olika kod beroende på programmets tillstånd. De båda senare delarna elif och else är valfria. if a < b: print a, "is less than", b elif a > b: print a, "is greater than", b else: print a, "is equal to", b
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner Loopar skapas med nyckelordet while på följande sätt i=1 while i<10: print i**2 i=i+1 Ofta vill man iterera över elementen i en lista. Detta är så vanligt att det fått en egen syntax och nyckelordet for l=range(1,10) #l = [1,2,3,4,5,6,7,8,9] for x in l: print x**2
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner Använd funktioner för att få ett renare gränssnitt Skicka data som argument till funktionen. Undvik globala variabler Dokumentera vad funktionen gör samt eventulla antaganden om indata. def convert_to_euro(kr, kurs): "Converts kr to euro" return kr/kurs
Variabler och datatyper Strängar och listor Villkor och loopar Funktioner En funktion som anropar sig själv kallas rekursiv def factorial(n): Computes the factorial n! of an integer n if n<=1: return 1 return n*factorial(n-1) Om den första raden i funktionsdefinitionen är en sträng tolkas den som dokumentation till funktionen. Att använda denna s.k. docstring är att föredra framför en vanlig kommentar (#)
Palindrom Anagram def is_palindrome(s): Returns true if the argument is a palindrome >>> is_palindrome("anna") True >>> is_palindrome("bertil") False l = list(s) lr = list(s) lr.reverse() return (l==lr)
Palindrom Anagram def is_palindrome(s): Returns true if the argument is a palindrome >>> is_palindrome("anna") True >>> is_palindrome("bertil") False for i in range(len(s)/2): if s[i]!= s[len(s)-1-i]: return False return True
Palindrom Anagram def are_anagrams(s, t): Returns true if the arguments are anagrams >>> are_anagrams("bac","cab") True >>> are_anagrams("abc", "abe") False ls=list(s) lt=list(t) if len(ls)==0 and len(lt)==0: return True if len(ls)!=len(lt) or not ls[0] in lt: return False lt.remove(ls[0]) # remove first occurence ls.remove(ls[0]) # alternatively ls.pop(0) return are_anagrams(ls, lt)
Palindrom Anagram def are_anagrams(s, t): Returns true if the arguments are anagrams >>> are_anagrams("bac","cab") True >>> are_anagrams("abc", "abe") False ls = list(s) ls.sort() lt = list(t) lt.sort() return (lt==ls)
Palindrom Anagram def are_anagrams(s, t): Returns true if the arguments are anagrams >>> are_anagrams("bac","cab") True >>> are_anagrams("abc", "abe") False dict_s = {}; dict_t = {} for c in s: if dict_s.has_key(c): dict_s[c]=dict_s[c]+1 else: dict_s[c]=1 for c in t: if dict_t.has_key(c): dict_t[c]=dict_t[c]+1 else: dict_t[c]=1 return dict_s == dict_t