15B: Python push ups

Oefeningen 15A, 15B, en 15C kunnen in elke willekeurige volgorde worden doorgewerkt.

In deze les komen verschillende middelgrote programma's aan bod waarmee de tools in eerdere lessen gecombineerd aan de orde komen.

Programmeeroefening: Veertig graden onder nul
In deze oefening dien je een temperatuur-vertaalprogramma te schrijven dat graden Fahrenheit vertaalt in graden Celsius en omgekeerd. Je hebt de volgende twee formules nodig die de temperatuur f in Fahrenheit omzet in de temperatuur c in Celsius: \displaystyle{f = c \times \frac{9}{5} + 32} \displaystyle{c = (f - 32)\times\frac{5}{9}.} De input is een string met daarin een decimaal getal onmiddellijk gevolgd door de letter F of C, zoals bij "13.2C". Je moet de input vertalen in de andere temperatuurschaal en de omgezette temperatuur afdrukken in het zelfde format. Als bijvoorbeeld de invoer "8F" is dan moet de uitvoer (ongeveer) "-13.333C" zijn, en als de invoer "12.5C" is dan moet de uitvoer "54.5F" zijn.
Type de invoer voor je programma hieronder in.

Programmeeroefening: Credit Check
Je bent ingehuurd door MeisterCard om een functie te schrijven die checkt of een creditcardnummer geldig is. Jouw functie  check(S) moet een string S als input accepteren. Als de string zich niet houdt aan het format "#### #### #### ####" (waar # een cijfer voorstelt) moet de uitkomst False zijn. Als de som van de getallen deelbaar is door 10 (een "checksum"), moet de functie True opleveren, en anders False. Voorbeeld: stel S is de string "9384 3495 3297 0123". Ondanks dat het formaat klopt moet de functie toch False opleveren, omdat de som van de getallen 72 is.
Voer testcommando's zoals print(myfunction("test argument")) hieronder in.

In de volgende opdracht moet je de methode string.split() gebruiken. Deze methode verwijdert de spaties uit een string, en levert een lijst met de losse woorden op. Gebruik ook string.lower() om kleine letters te maken van alle letters in een string. Bijvoorbeeld:

  • "Splits deze woorden!".split() levert de lijst ["Splits", "deze", "woorden!"] op
  • "KleIneLeTTeRs".lower() heeft als resultaat: "kleineletters"

Let op: split() accepteert nog meer opties om strings op andere manieren te splitsen; zie de documentatie.

Programmeeroefening: Poetic Analysis
Een schrijver werkt aan z'n nieuwste gedicht, Turing en z'n Machines. Hij heeft jou ingehuurd om uit te zoeken welk woord het vaakst in z'n gedichten voorkomt. Je kunt de regels van het gedicht inlezen door input() herhaaldelijk aan te roepen, en de laatste regels bevat de tekens ###. Alle regels bevatten woorden die gescheiden worden door enkele spaties; er zijn geen cijfers of leestekens. Zet alle woorden om in kleine letters en print het woord dat het vaakst voorkomt (we garanderen dat er geen gelijkspel optreedt). Stel bijvoorbeeld dat de input is:

Here is a line like sparkling wine
Line up fast or be the last
###
Dan zou de output moeten zijn:

line
omdat het woord "line" twee keer voorkomt, en geen ander woord vaker voorkomt.
Type de invoer voor je programma hieronder in.

Stel dat je n smaken schepijs hebt, en je wil een sorbet maken met precies k verschillende smaken. Hoeveel combinaties zijn er dan mogelijk? Bijvoorbeeld, stel dat n=4 en k=2, dan zijn er 6 mogelijkheden:

(1) A en B, (2) A en C, (3) A en D, (4) B en C, (5) B en D, (6) C en D.

(de smaken zouden hier bijvoorbeeld Aabrikoos, Bosbessen, Chocolade, en Druif kunnen zijn).

Je kunt op een vergelijkbare manier 2 mensen kiezen uit een groep van 4 (Albert, Bob, Carola, David) om een commissie te vormen. Op hoeveel manieren kan de commissie worden samengesteld? Ook nu is het antwoord 6. De volgende opdracht gaat over het uitrekenen van dit aantal.

Programmeeroefening: Be Choosy
Het aantal combinaties van k dingen uit een totaal van n dingen is gelijk aan \displaystyle{\frac{n}{k}\times\frac{n-1}{k-1}\times\cdots\times\frac{n-k+2}{2}\times\frac{n-k+1}{1}}
Schrijf een functie choose(n, k) die twee getallen n en k als invoer nodig heeft; we garanderen n>k>0. De functie moet de waarde opleveren die de formule hierboven beschrijft.
Voer testcommando's zoals print(myfunction("test argument")) hieronder in.

In de wiskunde wordt het getal dat je net hebt berekend meestal geschreven als

\displaystyle{\binom{n}{k}}

en uitgesproken als "n boven k." Deze waarden hebben allerlei interessante eigenschappen, zoals

\displaystyle{\binom{n}{k} = \binom{n}{n-k}} en \displaystyle{\binom{n}{k} = \binom{n}{k-1} + \binom{n-1}{k-1}}

Dit is het einde van deze opgaveserie; je kunt nu door naar een andere les.