Hur man programmerar. Exempel på problemlösning i Python

Relevanta dokument
Erfarenheter från labben

Python vecka 41-42: Individuell programmering

Erfarenheter från labben

Tentamen i Introduktion till programmering

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Introduktion till programmering SMD180. Föreläsning 7: Strängar

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Logik och kontrollstrukturer

Rekursion och induktion för algoritmkonstruktion

Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4

DD1314 Programmeringsteknik

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Datalogi för E Övning 3

Föreläsning 6: Introduktion av listor

729G04 Programmering och diskret matematik

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Uppgifter teknik HT17 (uppdaterad v. 40)

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Programmera och hitta buggarna. Se video

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Ordlistor, filhantering och ut på webben. Linda Mannila

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Användarhandledning Version 1.2

Digitalt lärande och programmering i klassrummet

Grundläggande datalogi - Övning 1

729G04 Programmering och diskret matematik

Programmering = modellering

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Tenta i Grundläggande programmering DD klockan

Tentamen, EDAA20/EDA501 Programmering

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

Extramaterial till Matematik Y

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Programmering II (ID1019) :00-12:00

Klassrumsprojekt programmering - Digitalt lärande

kl Tentaupplägg

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

C++ Lektion Tecken och teckenfält

TDIU01 - Programmering i C++, grundkurs

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

Tentamen TEN1 HI

Övning 1 - Abstrakta datatyper

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Välkomna till DIT012 IPGO

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Laboration: Whitebox- och blackboxtesting

729G04 Programmering och diskret matematik. Python 3: Loopar

IntoWords webb elevdata.se

Grundläggande datalogi - Övning 3

Föreläsning 13 och 14: Binära träd

Övning 6. Ali Tofigh 24 Oktober, 2006

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsning 1 & 2 INTRODUKTION

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

729G74 - IT och programmering, grundkurs. Dugga.

Sätt att skriva ut binärträd

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Deklarativ programmering

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Pascal... Pascal. Pascal... Pascal...

Exempel att testa. Stora problem och m-filer. Grundläggande programmering 4. Informationsteknologi. Informationsteknologi.

ENKEL Programmering 3

Snabbguide AlphaSmart NEO2

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Datalogi, grundkurs 1

Pythons standardbibliotek

Programkonstruktion och Datastrukturer

729G04 Programmering och diskret matematik. Föreläsning 7

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

TDP Uppgift 1

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

TDDE44 Programmering, grundkurs

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

Visual Basic, en snabbgenomgång

SP:PROG3 HT12 Tenta

TDDC74 Lab 02 Listor, sammansatta strukturer

Sanningar om programmering

TDP Regler

HI1024 Programmering, grundkurs TEN

Använda Python Laboration 1 GruDat, DD1344

Programmering och begrepp

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Transkript:

Hur man programmerar Exempel på problemlösning i Python

Problemet Som vokaler i engelska språket räknar vi i denna uppgift bokstäverna aeuio, och som konsonanter alla andra bokstäver utom y (y fungerar ibland som konsonant och ibland som vokal och därför struntar vi i den just nu). Skriv ett program som räknar ut hur många engelska ord har precis lika många konsonanter som vokaler. En lista av engelska ord Ainns i Ailen words.txt.

Problemlösninsstrategi När jag ser ett problem funderar jag först om det är så lätt att jag kan lösa det omedelbart, därför att: + Det är så lätt att jag inser lösningen bums, eller + Jag kan snabbt leta upp en funktion i något bibliotek, eller + Jag har löst detta tidigare. I annat fall, funderar jag på hur problemet kan delas upp i delproblem: Om jag löser delarna kan jag kombinera ihop en lösning till det urprungliga. Delproblemen behandlas med samma strategi. Till slut har jag bara enkla problem kvar.

Ursprungsproblemet Kan jag inte lösa bums. Men det sönderfaller i två delar: 1. Läs in alla orden från filen till en datastruktur som jag kan jobba med 2. Räkna ut hur många ord i den strukturen som har lika många vokaler som konsonanter

Delproblem 1 Kan jag lösa bums eftersom jag har gjort det förut. För att läsa in ord från en fil till en lista och ta bort avslutande radbyten kopierar jag kod från någon lab, tex def getlinesinfile(): radlista = [] fileobj = open("words.txt") lines = fileobj.readlines() for line in lines: line = line.strip() radlista.append(line) return radlista

Delproblem 2 Räkna ut hur många ord i en lista som har lika många vokaler som konsonanter Kan jag inte lösa bums. Vilket delproblem skulle kunna hjälpa mig? Anta att jag har en funktion som avgör, för ett visst ord, om det har lika många vokaler som konsonanter. I så fall är det bara att gå igenom listan och räkna upp en räknare för varje sådant ord. Alltså behöver jag lösa följande delproblem: (forts)

Delproblem 3 Avgör om ett ord har lika många vokaler som konsonanter Kan jag inte lösa bums. Vilka delproblem skulle kunna hjälpa mig? Anta att jag har funktioner som räknar ut antalet vokaler och antalet konsonanter. I så fall behöver jag bara jämföra om antalen är lika. Alltså behöver jag lösa följande delproblem: (forts)

Delproblem 4,5 Räkna antalet vokaler i ett ord Räkna antalet konsonanter i ett ord Kan jag inte lösa bums. Vi börjar med vokalerna. Vilket delproblem skulle kunna hjälpa mig? Anta att jag har en funktion som avgör om ett tecken är en vokal. I så fall behöver jag bara gå igenom ordet och räkna upp en räknare för varje vokal. Alltså behöver jag lösa följande delproblem: (forts)

Delproblem 6 Avgör om ett tecken är en vokal En vokal är något av tecknen aeuio. Detta är så lätt att jag kan lösa det bums, genom att använda konstruktionen tecken in aeuio

Delproblem 7 Avgör om ett tecken är en konsonant En konsonant är något som inte är en vokal och inte heller tecknet y. Detta kan jag lösa bums, genom att använda lösningen till delproblem 6 kombinerat med en jämförelse om tecken är y.

OBS Nu finns inga svåra delproblem kvar. Så här långt har jag kommit utan att röra tangentbordet. Problemuppdelning gör man bäst innan man börjar själva programmeringen. Den är i stort oberoende av vilket programmeringsspråk som används. Använd papper och penna i detta arbete och skriv upp de funktioner som behövs. Till slut har jag en karta över dem:

Fullständig uppdelning vokal(tecken): avgör om tecken är vokal konsonant(tecken): avgör om tecken är konsonant antalvok(word): räknar vokaler i ett ord antalkons(word): räknar konsonanter i ett ord likavokkons(word): avgör om antalet v och k är lika antallika(wordlist): räknar antal ord med lika många v som k i wordlist

Syntes Nu är det dags att att börja programmera. Det gör jag bottom up, dvs jag börjar med de minsta delproblemen. För vart och ett gör jag en funktion. Varje funktion testas innan jag går vidare.

Delproblem 6: vokal def vokal(tecken): if tecken in aeuio : return True else: return False Testkör detta med några exempel! Anm: Precis samma sak görs av följande mer kompakta funktion: def vokal(tecken): return tecken in aeuio

Delproblem 7: konsonant def konsonant(tecken): if vokal(tecken) or tecken == y : return False else: return True Testkör detta med några exempel!

Delproblem 4: antalvok def antalvok(word): res = 0 # räknare för vokaler for tecken in word: if vokal(tecken): res += 1 # ökas för varje vokal return res Testkör detta med några exempel!

Delproblem 5: antalkons def antalkons(word): res = 0 # räknare för konsonanter for tecken in word: if konsonant(tecken): res += 1 # ökas för varje kons return res Testkör detta med några exempel!

Delproblem 3: likavokkons def likavokkons(word): if antalvok(word)==antalkons(word): return True else: return False Testkör detta med några exempel!

Delproblem 2: antallika def antallika(wordlist): res = 0 # räknar antal likaord for word in wordlist: if likavokkons(word): res += 1 # ökas för varje likaord return res Testkör detta med några exempel! Definiera några enkla ordlistor först.

Huvudprogram def uppgift(): wordlist = getlinesinfile() return antallika(wordlist) Testkör, helst genom att först ta en ordlista i en mindre fil Bonus: Mitt program består av ett antal små (max 6 rader) funktioner och är därför lättbegripligt!

Sammanfattning Börja med en problemuppdelning Gör klart vilka funktioner som behövs Koda dem bottom up Testa i varje steg

Övningar Tillämpa detta på alla uppgifter på labbarna!