Uitwerking opgaven Programmeermethoden NA werkcollege 5 Dinsdag 4 oktober 2016 1. def celsius(fahrenheit): '''Gegeven een temperatuur in graden Fahrenheit, bereken de temperatuur in graden Celsius.''' return 5 / 9. * (fahrenheit - 32.) # Druk een kleine temperatuurschaal af in graden F en C. print "Graden F: ", for i in range(0, 140, 20): print "{:5.1f}".format(i), print print "Graden C: ", for i in range(0, 140, 20): print "{:5.1f}".format(celsius(i)), print 2. In plaats van machtsverheffing vermenigvuldigen we 'zelf' steeds de noemer met 2. # A(n) = 1/2 + 2/4 + 3/8 + 4/16 + ... + n/2^n def breuken_som(n): som = 0. # om de uiteindelijke som in te verzamelen noemer = 1 # noemer nu 1, wordt 2 bij eerste iteratie for i in range(1, n+1): noemer *= 2 # Vergeet niet de conversie naar float(), anders wordt het # resultaat van de deling een (afgeronde) integer. som += i / float(noemer) return som # Vraag invoer van gebruiker en test de functie. print "Geef aantal termen: ", n = int(raw_input()) print "De som is:", breuken_som(n) 3. a. 3 96 19 97 6 16 b. Vergeet niet de termen te vereenvoudigen. def G(a, b): return (a - 2) * (a + b + 2) + 1 c. Merk nu op dat in functie g de variabele x niet meer lokaal is maar globaal. Bij de eerste keer wordt de globale variabele x met waarde 6 dus overgeschreven met 3. De uitvoer van de eerste keer blijft hetzelfde: 3 96 19 97 3 16 De tweede keer echter wordt bij het aanroepen van g met g(x, y) de *nieuwe* waarde van de globale x gebruikt. Dit resulteert in: 3 21 19 22 3 16 x wordt overschreven met 3, maar was al 3. Dus alle volgende aanroepen zullen hetzelfde opleveren. 4. Het eenvoudigste is als volgt: hoogte = 4 for i in range(hoogte): print "{0}{1}{0}".format(" " * (hoogte - 1 - i), "*" * (1 + 2 * i)) Het kan nog iets korter door gebruik te maken van een parameter voor de breedte van het "format field" en automatisch te centreren: hoogte = 4 max_breedte = 1 + 2 * (hoogte - 1) for i in range(hoogte): # Met behulp van de "geneste" accolades geven we aan dat de breedte # van het veld niet constant is, maar wordt gespecificeerd door # parameter 1. print "{0:^{1}}".format("*" * (1 + 2 * i), max_breedte)