Uitwerkingen LES 2#
OPDRACHT Genereer een lijst van even getallen onder de 100. Hieronder een begin. Herinner dat een getal even is als je het kan delen door 2, in python doe je dat met %.
Er zijn meerdere antwoorden mogelijk, hier zie je een paar
lijst = list(range(1,101)) #dit genereert een lijst van 1 tot en met 100
evenlijst = [] #dit wordt het lijstje van even getallen
for getal in lijst:
if(getal%2==0): #het getal is even als het deelbaar is door 2
evenlijst.append(getal) #noteer hier hoe je dan de evenlijst vult
print(evenlijst)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
#ALTERNATIEF
lijst = list(range(2,101,2)) #de derde argument van range is de stapgrootte, dat kunnen we hier al oproepen :-)
print(lijst)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
#ALTERNATIEF 2
getal = 2 #start met het getal 2, de eerste even getal
lijst = [] # een lege lijst
while getal<101: # zolang het getal kleiner is dan 100
lijst.append(getal) # voeg het getal toe aan de lijst
getal = getal+2 # tel twee op bij het getal, die is namelijk dan ook even
print(lijst)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
OPDRACHT
Maak een lijst van de eerste 20 positieve getallen die zowel deelbaar zijn door 3 als door 5.
De eerste vijf getallen zijn dus 15, 30, 45, 60, 75 (0 tellen we NIET mee, dat is suf want is altijd ergens door deelbaar)
Print tenslotte de 10e getal in deze lijst, en tel daar dan de laatste getal in deze lijst bij op.
Als je de opdracht goed hebt gedaan, is het antwoord 450
#noteer je code voor je opdracht hier, een klein begin is gemaakt
getal = 1
lijstje = []
while len(lijstje)<20:
if(getal%3==0 and getal%5==0): #met AND moet aan beide voorwaarden tegelijkertijd worden voldaan
lijstje.append(getal) # als aan beide voorwaarden is voldaan, dan voegen we het getal toe aan het lijstje
getal = getal +1 # verhoog niet het getal met 1
print(lijstje[9]+lijstje[-1]) # het 10e getal is index 9, en het laatste getal is OF index 19 of index -1, kan beide
450
Priemtweelingenopdracht
Opdracht 1:
Maak een lijst van de eerste 100 priemtweelingen. Een priemtweeling is een paar priemgetallen die maar 2 verschillen, voorbeeld (3,5) en (5,7), …
def is_priem(getal):
delers = list(range(2,int(getal**0.5+1))) #we hoeven niet verder te controleren tot de wortel van getal, echter moet in list een geheel getal staan, dus maken met int er een integer van.
for deler in delers:
if getal%deler == 0:
return False #het getal is deelbaar door deler, dus is het getal geen priem
return True #omdat er nooit een False is geweest, moet het getal dus wel priem zijn
priemlijst=[]
for getal in range(2,100):
if is_priem(getal):
priemlijst.append(getal)
priemtweelingenlijst = []
getal1 = 3
getal2 = 5
while len(priemtweelingenlijst)<100:
if(is_priem(getal2) and is_priem(getal1)):
if(getal2 - getal1 == 2):
priemtweelingenlijst.append((getal1,getal2))
getal1 = getal1+2
getal2 = getal2+2
print(priemtweelingenlijst)
[(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), (149, 151), (179, 181), (191, 193), (197, 199), (227, 229), (239, 241), (269, 271), (281, 283), (311, 313), (347, 349), (419, 421), (431, 433), (461, 463), (521, 523), (569, 571), (599, 601), (617, 619), (641, 643), (659, 661), (809, 811), (821, 823), (827, 829), (857, 859), (881, 883), (1019, 1021), (1031, 1033), (1049, 1051), (1061, 1063), (1091, 1093), (1151, 1153), (1229, 1231), (1277, 1279), (1289, 1291), (1301, 1303), (1319, 1321), (1427, 1429), (1451, 1453), (1481, 1483), (1487, 1489), (1607, 1609), (1619, 1621), (1667, 1669), (1697, 1699), (1721, 1723), (1787, 1789), (1871, 1873), (1877, 1879), (1931, 1933), (1949, 1951), (1997, 1999), (2027, 2029), (2081, 2083), (2087, 2089), (2111, 2113), (2129, 2131), (2141, 2143), (2237, 2239), (2267, 2269), (2309, 2311), (2339, 2341), (2381, 2383), (2549, 2551), (2591, 2593), (2657, 2659), (2687, 2689), (2711, 2713), (2729, 2731), (2789, 2791), (2801, 2803), (2969, 2971), (2999, 3001), (3119, 3121), (3167, 3169), (3251, 3253), (3257, 3259), (3299, 3301), (3329, 3331), (3359, 3361), (3371, 3373), (3389, 3391), (3461, 3463), (3467, 3469), (3527, 3529), (3539, 3541), (3557, 3559), (3581, 3583), (3671, 3673), (3767, 3769), (3821, 3823)]
Opdracht 2:
Geef de langste collatzrij onder 100.
Een Collatzrij is een reeks getallen dat aan de volgende voorwaarden voldoet:
als het getal even is, halveer het
als het getal oneven is, vermenigvuldig met 3 en tel er 1 op.
Voorbeeld van zo’n rij: [10, 5, 16, 8, 4, 2, 1]
Het is een open probleem of een collatzrij altijd eindigt. Het einde van de collatzrij is altijd 1: 1x3+1 = 4, dan kom weer 2 en 1 uit.
De lengte van collatzrijen verschillen, en er is eentje die heel lang is. Wat is de lengte van die rij, en print die rij ook uit.
def collatzrij(k):
collatzlist = [k]
while k>1:
if(k%2==0):
k = int(k/2)
elif(k%2==1):
k = 3*k+1
collatzlist.append(k)
return collatzlist
langstecollatz = collatzrij(2)
for i in range(2,101):
if(len(collatzrij(i)) > len(langstecollatz)):
langstecollatz = collatzrij(i)
print("de langste rij is ",len(langstecollatz)," lang en is gelijk aan")
print(langstecollatz)
de langste rij is 119 lang en is gelijk aan
[97, 292, 146, 73, 220, 110, 55, 166, 83, 250, 125, 376, 188, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
Opdracht 3:
Schrijf een functie om te checken of drie getallen een zogeheten Pyathagorastriple is.
Een Pythagorastriple (a,b,c) heeft de eigenschap dat a^2 + b^2 = c^2 voor a, b, c gehele positieve getallen.
Gebruik deze functie vervolgens om alle pythagorastriplets te vinden met a, b, c < 100. Sla dit op in een lijst. TIP: gebruik 3 for loops, en het inzicht dat a < b < c.
def pythtriple(a,b,c):
if(a**2+b**2==c**2):
return True
else:
return False
pythtriplelijst = []
for a in range(1,98): #a < b < c < 100 dus a is maximaal 98
for b in range(a, 99):
for c in range(b, 100):
if(pythtriple(a,b,c)):
pythtriplelijst.append((a,b,c))
print(pythtriplelijst)
[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), (8, 15, 17), (9, 12, 15), (9, 40, 41), (10, 24, 26), (11, 60, 61), (12, 16, 20), (12, 35, 37), (13, 84, 85), (14, 48, 50), (15, 20, 25), (15, 36, 39), (16, 30, 34), (16, 63, 65), (18, 24, 30), (18, 80, 82), (20, 21, 29), (20, 48, 52), (21, 28, 35), (21, 72, 75), (24, 32, 40), (24, 45, 51), (24, 70, 74), (25, 60, 65), (27, 36, 45), (28, 45, 53), (30, 40, 50), (30, 72, 78), (32, 60, 68), (33, 44, 55), (33, 56, 65), (35, 84, 91), (36, 48, 60), (36, 77, 85), (39, 52, 65), (39, 80, 89), (40, 42, 58), (40, 75, 85), (42, 56, 70), (45, 60, 75), (48, 55, 73), (48, 64, 80), (51, 68, 85), (54, 72, 90), (57, 76, 95), (60, 63, 87), (65, 72, 97)]