Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D. tobias@dsv.su.se
Notera att exemplen är i Python 2.5 För att översätta till Python 3.0, gör följande ändringar print(x,y) istället för print x,y input("ett tal: ") istället för raw_input("ett tal: ")
# prog 01, "Hello, world" print "Hello, world" # prog 02, "Greet" name = raw_input("what is your name? ") print "Hello," name # prog 03, "Sort names" names = [] i = 0 while i<5: names[i] = raw_input("type in a name: ") i = i + 1 names.sort() for name in names: print name
# prog 04, "Simple adder" term1 = raw_input("give me a number: ") term2 = raw_input("give me another number: ") term1 = int(term1) term2 = int(term2) print term1, "+", term2, "=", term1+term2
# prog 05, "Area calculator" base = raw_input("base: ") height = raw_input("height: ") base = int(base) height = int(height) area = base * height print "The rectangle", base, "x", height, "has area", area
# prog 06, "Simple calculator" term1 = raw_input("give me a number: ") term2 = raw_input("give me another number: ") op = raw_input("give me an operator: ") term1 = int(term1) term2 = int(term2) sum = 0 if op == "+": sum = term1 + term2 elif op == "-": sum = term1 - term2 elif op == "*": sum = term1 * term2 elif op == "/": sum = term1 / term2 print term1, op, term2, "=", sum
# prog 08, "Rectangle drawer 1" base = raw_input("base: ") height = raw_input("height: ") base = int(base) height = int(height) for row in range(0,height): for col in range(0,base): print "X", print "" # prog 09, "Rectangle drawer 2" base = raw_input("base: ") height = raw_input("height: ") base = int(base) height = int(height) print ("X " * base + "\n") * height
# prog 10, "Rectangle drawer 3" base = raw_input("base: ") height = raw_input("height: ") base = int(base) height = int(height) while height > 0: temp = base while temp > 0: print "X", temp = temp - 1 print "" height = height - 1
# prog 10, "Name count" fil = open("names.txt") names = fil.readlines() fil.close() counter = {} for name in names: if name in counter.keys(): counter[name] = counter[name] + 1 else: counter[name] = 1 for name in counter.keys(): print name + ":", counter[name]
# prog 11, "Most common name" fil = open("names.txt") names = [] for name in fil.readlines(): names.append(name.strip()) fil.close() counter = {} largest = { "count" : 0, "name" : None } for name in names: if name in counter.keys(): counter[name] = counter[name] + 1 else: counter[name] = 1 if counter[name] > largest["count"]: largest = { "count" : counter[name], "name" : name } print "Most common name was", largest["name"], \ "at", largest["count"]
Funktion En funktion är en samling instruktioner under ett namn Ett exempel är funktionen sqrt() som tar roten ur Istället för att upprepa instruktionerna kan man anropa funktionen flera gånger En funktion kan returnera ett resultat En funktion kan ta emot argument från den som anropar, t.ex. sqrt(9) för att dra roten ur 9 och sqrt (123) för att dra roten ur 123
# prog 12, "greeter" def greet(message): name = raw_input("skriv ditt namn: ") print message, name greet("hello") greet("hi") greet("oi")
En ungefärlig tolkning av föregående program message = "Hello" name = raw_input("skriv ditt namn: ") print message, name message = "Hi" name = raw_input("skriv ditt namn: ") print message, name message = "Oi" name = raw_input("skriv ditt namn: ") print message, name Python ersätter anropet till en funktion med koden för funktionen. Det är inte så det egentligen fungerar, men det är ett sätt att förstå konceptet.
# prog 12, "prog 10 refactored with functions" # Library part def read_list(filename): fil = open(filename) names = [] for name in fil.readlines(): names.append(name.strip()) fil.close() return names def frequency_count(set): freq = {} for el in set: if el in freq.keys(): freq[el] = freq[el] + 1 else: freq[el] = 1 return freq # Actual program (in same file for now) names = read_list("names.txt") counter = frequency_count(names) for name in counter.keys(): print name + ":", counter[name]
# prog 13, "prog 11 refactored with functions" # Actual program names = read_list("names.txt") counter = frequency_count(names) largest = { "count" : 0, "name" : None } for name in counter.keys(): if counter[name] > largest["count"]: largest = { "count" : counter[name], "name" : name } print "Most common name was", largest["name"], \ "at", largest["count"]
# Returnera det största av två värden def max(a,b): if a > b: return a else: return b print max(3,5) print max(75235342,9097867236) print max(7,7) # Returnera det största av två värden, alternativ def max(a,b): result = None # läs om None på nästa sida if a > b: result = a else: result = b return result
Värdet None None är ett värde (som siffran 1, strängen "Hej", det booleska värdet False och listan [1,3,5,7]) Det används för att representera ingenting, eller avsaknad av ett värde Man kan tilldela en variabel värdet None innan man räknat ut det värde den skall ha, som i fallet med result på föregående bild (För den som programmerat tidigare i språk som har koncept som null eller nil så är det samma sak)
Klass En klass är en beskrivning av en typ av objekt, t.ex. beskriver klassen Person vad en person är, klassen list vad en lista är, etc. En klass används för att skapa objekt, objekt kallas även för instanser och att skapa dem för att instantiera en klass (instans betyder ung. förekomst, d.v.s. ett objekt är en faktisk förekomst av någonting en klass beskriver) En klass kan ha 0 eller flera attribut och metoder Attribut är som variabler och metoder är som funktioner Klassbegreppet är viktigt först på senare kurser
# prog 14, "A simple class" class Point: def init (self, x, y): self.x = x self.y = y def move_to(self, other_point): self.x = other_point.x self.y = other_point.y def display(self): print "(" + str(self.x) + "," + str(self.y) + ")" origo = Point(0,0) some = Point(5,7) some.display() some.move_to(origo) some.display()
# prog 15, "A slightly more complex class" class Person: def init (self, name, age): self.name = name self.age = age self.spouse = None def marry(self, person): self.spouse = person def present(self): last = "." if not self.spouse == None: last = ", and I'm married to " + self.spouse.name + "." return "Hello, my name is " + self.name + ", " + \ "I'm " + str(self.age) + " years old" + last bob = Person("Bob", 17) alice = Person("Alice", 23) print bob.present() alice.marry(bob) print alice.present()