Lage større programmer (Python, relatert til teoridelen om Software Engineering ) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Like dokumenter
Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Oppsummering fra sist

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

TDT4110 Informasjonsteknologi, grunnkurs

YouTube-kanal ITGK. Læringsmål og pensum

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

Repetisjon, del 1. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Enkle funksjoner. - 3rd edition: Kapittel Professor Alf Inge Wang

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

TDT4105 Informasjonsteknologi, grunnkurs

Python: Lister og tupler Gaddis: Kapittel 7

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Uke 48 Oppsummering/Spørretime. Professor Alf Inge Wang

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak ( exceptions ) - 3rd edition: Kapittel 6. Professor Alf Inge Wang

Læringsmål og pensum. Inn- og utoperasjoner 21/10/16

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

Python: Variable og beregninger, innlesing fra tastatur utskrift til skjerm. TDT4110 IT Grunnkurs Professor Guttorm Sindre

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

Læringsmål og pensum. v=nkiu9yen5nc

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler. - 3rd edition: Kapittel 7. Professor Alf Inge Wang

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler

IN1000 Obligatorisk innlevering 7

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Oblig 2, SLI250 Et kortfattet analyse og designdokument for skifteregister på nett

Øvingsforelesning TDT4105

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

HØGSKOLEN I SØR-TRØNDELAG

Læringsmål og pensum. if (be): else (not_to_be):

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Excited. Hvordan komme i gang med tekstbasert programmering? Centre for Excellent IT Education. Guttorm Sindre

Python: Filer og unntak Gaddis: Kapittel 6

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Løse reelle problemer

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Løse reelle problemer

TDT4110 IT Grunnkurs Høst 2015

Python: Mengder og Dictionaries 3. utgave: Kapittel 9

HØGSKOLEN I SØR-TRØNDELAG

TDT4100 Objektorientert programmering

TDT Prosedyre- og objektorientert programmering

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Python: Filer og unntak Gaddis: Kapittel 6

Informasjon Prøveeksamen i IN1000 høsten 2018

TDT4110 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

HØGSKOLEN I SØR-TRØNDELAG

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Læringsmål og pensum. Algoritmeeffektivitet

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til IKT. Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap

Læringsmål og pensum. Oversikt

Python: Mengder og Dictionaries 3. utgave: Kapittel 9

TDT4127 Programmering og Numerikk

TDT4105 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

TDT4110 IT Grunnkurs Høst 2014

TDT4105 Informasjonsteknologi, grunnkurs

Gruppe 43. Hoved-Prosjekt Forprosjekt

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Filbehandling Tekstfiler

AlgDat 12. Forelesning 2. Gunnar Misund

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

Funksjonskravene er delt opp i to deler, krav til spillsekvens og generelle funksjonskrav.

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

BRUK AV TiSferaDesign I RINGETABLÅER MED ELEKTRONISK NAVNELISTE:

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

NB: Vi trenger alle sitteplassene, så ikke la setene stå tomme i mellom dere! Fyll opp forfra, fra midten, er dere snill

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Dagbok. Januar. Uke 2 ( ) Uke 3 ( ) Uke 3 (17.01, 12:45-14:00)

Øvingsforelesning i Python (TDT4110)

Transkript:

Lage større programmer (Python, relatert til teoridelen om Software Engineering ) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum Mål Lære å lage større og sammensatte programmer Kunne løse problemer hvor man må bruke mange deler av pensum samtidig Pensum Pythonboka kap. 1-9, 12 Teorikapitlet om Software Engineering 2

Programmering av systemer Lage et lite system som består av flere deler. Bruke mye av det vi har lært: Kontrollstrukturer if, while, for Funksjoner og moduler Datatyper og datastrukturer Tall, strenger, lister, tupler, mengder, dictionary Filer Unntaksbehandling 3

CASE: bondesjakkspill Funksjonelle krav: F1: Brukerne skal kunne spille partier utføre lovlige trekk se brettet oppdatert etter hvert trekk F2: Programmet skal oppdage om noen har vunnet F2: Brukerne skal kunne lagre et parti på fil F3: Brukerne skal kunne hente fram parti fra fil F4: Brukerne skal kunne spille videre på et uferdig parti F5: Brukerne skal kunne se gjennom et parti trekk for trekk F6: Bruker skal kunne få fram statistikk Hvem har spilt, antall partier, seire og tap 4

Andre krav Utstyr: I første omgang kun PC (ikke for eksempel mobil, nettbrett ) Brukergrensesnitt: I første omgang fornøyd med et ordinært tekstlig (konsoll) brukergrensesnitt, men programmet bør lages slik at det ikke er altfor vanskelig å bytte til et penere brukergrensesnitt senere. Datalagring: I første omgang fornøyd med å lagre på ordinære filer, men programmet bør struktureres slik at det i fremtiden ikke er altfor vanskelig å skifte til å lagre vha. database. Spillmuligheter: I første omgang menneske mot menneske, men bør være lett å utvide med at man spille mot maskinen. 5

Hvordan analyserer vi problemet? Analysen kan svare på følgende spørsmål: Hvilke data trenger vi å ta vare på? Hvordan kan vi ta vare på dem? Hvilke datatyper eller datastrukturer kan vi bruke? Hvordan skal vi dele opp systemet i funksjoner og moduler? Hvordan er kontrollflyten i systemet? 6

Dataanalyse Dataene vi skal håndtere i dette systemet er Navn på spillere Partiene som spilles Trekkene Hvem som vant og tapte (spillernavn) Brettposisjonen til en hver tid 7

Datatyper og datastrukturer Hvilke datatyper passer for informasjonen: Spillernavn: streng Parti: liste med to spillernavn og deretter alle trekkene Trekk: tuppel (Rad, Kolonne) Rad, Kolonne: heltall Hvilket trekk som ble gjort (X, O)? (Unødvendig, alltid annet hvert trekk) Brettposisjon: 2D-liste (liste av lister) Hver «rute»: blank, X eller O NB: det vi viser brukeren, trenger ikke være det samme som vi har i datastrukturen. Kan f.eks. Vise på skjermen, X, O Lagre 0, 1, 1 Vise: det som er lettest for brukeren å forstå Lagre: det som tar minst lagerplass / er lettest å prosessere 8

Hvilke moduler trenger vi? Hovedmodul main.py Starter programmet Overordnet funksjonaliteten uten å gå i detaljer importerer andre moduler, kaller funksjonene deres viser overordnet prosess for systemet Modul for brukergrensesnittet bruker.py All lesing fra tastatur og skriving til skjerm Skal kun måtte endre her for å skifte UI Modul for filbehandling fil.py All lesing fra og skriving til fil Skal kun måtte endre her for å skifte lagringsmåte Moduler for å unngå for mye detaljer i main.py Modul for spill-logikken spill.py Modul for statistikk stat.py Modul for hjelpefunksjoner util.py 9

Hvilke moduler trenger vi? Systemet består nå altså av følgende moduler: spill.py bruker.py main.py fil.py stat.py util.py 10

Hvordan er flyten i systemet? Hovedmodulen: Gi startinfo Så lenge bruker ikke velger avslutt: Motta menyvalg fra brukeren Hvis valget er gyldig og mulig å utføre: Utfør det Gi sluttinfo 11

Hvordan er flyten i systemet? Spille parti: Initialiser brettet Uten trekk hvis nytt parti Med tidligere utførte trekk hvis fortsettelse av avbrutt parti Så lenge ingen har vunnet og ingen har avbrutt Les inn lovlig trekk Utfør trekket Hvis vunnet: lagre resultat 12

Moduler Vi skal nå se på hvordan vi kan implementere (programmere) systemet ved hjelp av modulene main.py spill.py stat.py bruker.py fil.py util.py 13

Oppgave: Nytt krav: Hvis CPU skrives inn som navn på en av spillerne, skal denne spilles av maskinen 1. Finn ut HVOR i koden vi må gjøre endringer for å få til dette 2. Prøv å skriv noen få kodelinjer så maskinen trekker trenger ikke være gode trekk 14

Oppsummering I utvikling av systemer bør man dele opp programmet i flere deler, for eksempel ved hjelp av moduler. Før man skriver kode for et system, bør man skrive opp kravene til systemet, samt lage en skisse for inndeling av moduler og flyten igjennom programmet. Man kan angripe problemet på to ulike måter: Top-down: Ser på overordnet struktur først, så detaljer Bottom-up: Ser på detaljer først og deretter overordnet struktur Skill ut brukergrensesnitt, filbehandling, hjelpefunksjoner og hovedprogram. 15