Programmering 1

Innehållsförteckning

1. Grunder

Grunder

  • Om datorn, hårdvara och mjukvara
  • Källkod och maskinkod
  • Olika programmeringspråk
  • Kompilering
  • Programspråket Python
  • Python 2 v.s Python 3

Datorn

En dator är en maskin som utför beräkningar och bearbetar data enligt givna instruktioner. Exempel på olika datorer är persondatorn, miniräknare, mobiltelefon, läsplatta eller spelkonsol.  

En dator består av hårdvara som processor, minneschip och andra elektroniska komponenter.

Den styrs av mjukvara, s.k. program, som kan användas till många olika tillämpningar. Ett program är en samling instruktioner som en dator kan tolka och utföra. De kan vara mycket enkla, som en enkel miniräknare, till att vara mycket komplexa och innehålla miljontals rader kod, som exempelvis ett ordbehandlingsprogram eller ett kraftfullt spel. 

Källkod och maskinkod

Ett program finns i två format, källkod och maskinkod. Maskinkod är 1-or och 0-or som bara datorn kan förstå. Eftersom det är väldigt jobbigt för oss människor att skapa maskinkod direkt så skrivs program i källkod.

Källkod kan man skriva som vanlig text i en ordbehandlare, rad för rad, i olika stycken (block). Det är viktigt att källkoden skrivs korrekt och med rätt ”grammatik vilket kallas syntax och som beror på det programmeringsspråk som används.

En kompilator översätter källkod till maskinkod, lagrar den i en exekverbar fil, så att datorn kan tolka instruktionerna och köra programmet (exekvera). Pythonkod översätts också till maskinkod men interpretaras istället för att kompileras. Till skillnad från kompilatorn tolkar en interpretator maskinkoden direkt, den läser en instruktion i taget och utför den.

.

Python

  • Lanserades 1991 av Guido van Rossum
  • Vanligt som nybörjarspråk, men också ett av de mest populära idag
  • Använder dynamisk typning och beskrivs som scriptspråk
  • Används för allt möjligt, mycket till vetenskapliga beräkningar, maskininlärning, webben
  • Python 3 släpptes 2008 och var då inte helt och hållet bakåtkompatibel med Python 2
  • Vi kommer använda Python 3 i kursen!

Python

  • Något som utmärker Python är dess eleganta och rena programkod
  • I övriga programspråk brukar klammra {} användas för att dela in olika block, medan Python använder indentering. Blir "rent" och ökar läsbarheten
  • "The Zen of Python" - 20 förhållningssätt för en pythonprogrammare (för dig som är intresserad)

2. Installera utvecklingsmiljön

Installera Python 3

Installera Visual Studio Code

Installera en Extension som heter Python

Hjälper dig att köra, felsöka, formatera kod, etc.

Olika typer av program

Konsolprogram (terminalen)

Graphical User Interface (GUI)

3. Ett första exempel

Programmet "Hello World"

# Skriver ut texten "Hello World" i terminalen
message = "Hello World"
print(message)

Output

Det programmet skickar ut till användaren

# Anges i början av en kommentarrad

Kommenterar

  • Text som ignoreras av själva programmet
  • Bra för att anteckna, skriva förklaringar för sig själv och någon annan som ska förstå koden

I VS Code kan du även markera koden till vill markera och välja

Edit -> Toggle Line Comment eller Toggle Block Comment

VARIABLER

 

DATATYPER

OCH

Mål

  • Vad är en variabel och hur används en variabel?
  • Vad är en datatyp och några av de mest användbara datatyperna i Python
  • Lära sig att hantera input och output från/till användaren
  • Hur man omvandlar (konverterar) datatyper
  • Varför Python kallas för ett dynamiskt typat språk
  • Pythons regler och konventioner för namn på variabler

Variabler

  • I programmering är en variabel en platshållare för ett värde. 
  • Tänk matematik, du ger exempelvis x värdet 5, x = 5
  • En variabel får ett namn som används för att komma åt värdet
  • En variabel kan förändras  under programmets gång
  • En variabel innehåller en reserverad plats i datorns arbetsminne

Variabler tilldelas med ett variabelnamn till vänster och ett värde till höger om likamedstecknet

total_points = 1034

Variabelnamn

Värde

Variabler måste alltid tilldelas innan de kan användas i programmet. Annars blir det fel när man kör (exekverar) programmet. Felet brukar lyda "undefinied variable.."

Tilldelning

Tilldelning

Här tilldelas variabeln pokemon värdet med texten "Pikachu". Eftersom det är en text och inte ett tal så skriver man den med citattecken. 

pokemon = "Pikachu"

Variabelnamn

Värde

  • Kan tilldelas till andra variabler
  • Tilldelas ett annat värde i programmet
  • Tilldelas med andra variabler på samma rad
python_is_awesome = 100
another_var = python_is_awesome
python_is_awesome = 1234
x, y, z = 50, 30, 100

Variabler

Datatyper

Det värde som man tilldelar en variabel måste vara av giltig datatyp. Pythons mest vanliga datatyper:

DATATYP BESKRIVNING
str En sekvens av tecken. Benäms string, sv sträng. Med enkla eller dubbla citattecken. Ex "name" eller 'name'
int Heltal som 1, 32, 4, o.s.v står för eng heltal
float Decimaltal som 1.3, 4.56, osv. Obs! använd punkt, ej kommatecken
bool True eller False, d.v.s sant eller falskt
list En ordnad sekvens av värden av olika datatyper. Ex [1,2,3] eller ["a", "b", "c"]

Med flera!

my_str = "a hat"
my_other_str = 'a cat'

String

En sträng, d.v.s en sekvens av tecken kan antingen deklareras med enkla citattecken ' eller dubbla ".

Du kan använda antingen eller, men tänk på  att du är konsekvent vilken du använder i samma programfil.

str_one = "john"
str_two = "doe"
str_three = str_one + " " + str_two  # john doe

Strängkonkatenering

Med konkatenering menas att man "sätter ihop" flera strängar efter varandra. Det gör man med + - operatorn

Man kan också använda += - operatorn

str_one = "ice"
str_one += " cream"
str_one  # ice cream

Nummer

INTEGER FLOAT
4 6.1
57 1.3333
10 0.0

Två huvudtyper av nummer:

Integer är heltal och float är decimaltal

my_str = "moonlight"
print(type(my_str)) # Skriver ut <class 'str'>

my_int = 666
print(type(my_int)) # Skriver ut <class 'int'>

my_float = 666.666
print(type(my_float)) # Skriver ut <class 'float'>

Datatyper

För att veta vilken datatyp en variabel är av använder du type()

python_variable = True
print(python_variable) # True

python_variable = "a dog"
print(python_variable) # a dog

python_variable = None
print(python_variable) # None

python_variable = 22 / 7
print(python_variable) # 3.142857142857143

Dynamisk typning

Python är flexibelt att tilldela variabler värde av olika datatyper.

Detta kallas dynamisk typning,

Andra språk som C++/C#/Java, m.fl har inte dynamisk typning, utan statisk typning.

Variabelnamn

  1. Variabler kan bara börja med bokstäver eller underscore _
  2. Resterande tecken i variabelnamnet kan endast vara bokstäver, nummer eller underscore_
  3. Inga reserverade ord som redan finns i python (vi kommer till detta senare, men exempvis kan du inte använda print)
  4. Case-sensitive, d.v.s skillnad på stora och små bokstäver

Regler som måste följas, annars blir det fel i programmet!

Variabelnamn

  1. De flesta variabler ska använda sig av s.k snake_case. Små bokstäver och underscore mellan orden. Namnge alltid din variabel utifrån vad den gör, ex health_points = 30.
  2.  CAPITAL_SNAKE_CASE refererar till konstanter ex PI = 3.14
  3. Vi återkommer till fler namnkonventioner när det blir aktuellt

Pythonprogrammare brukar använda sig av namnkonventioner så att koden blir enhetlig både för sig själv och andra. Ingen regel, utan mer om hur du uppför dig som kodare 

_cats 
2cats
cats2
hey%%%you
CATS != Cats 
print
print_all

Variabelnamn

namn = input("Skriv ditt namn:")

Input

Det användaren skickar till programmet

 Läser in text från användaren som tilldelas till variabeln namn.

Metoden input() läser in värdet som string, d.v.s namn blir av datatypen str.

Typomvandling

birth_year = int(input("Skriv in ditt födelseår:"))
current_year = int(input("Skriv in nuvarande årtal:"))
age = current_year - birth_year

Behövs göras när man vill omvandla en variabel av en viss datatyp till en annan. Använd datatypens namn och () kring utrycket.

Ett bra exempel på detta är när du behöver ha ett nummer, int eller float, från input() för att kunna utföra matematiska operationer.

Med int() omvandlas här en str till int

RÄKNA

 

 

PYTHON

MED

Hantera nummer och matematik

MÅL

 

  • Använda de mest vanliga matematiska operatorerna
  • Skillnaden på int och floats
  • Prioriteringsregler
  • Några mindre vanliga, men användbara matematiska operatorer som modulo, integer division och exponentiering

Matematiska operatorer

SYMBOL FUNKTION
+ Addition
- Subtraktion
* Multiplikation
/ Division
** Exponentiering
% Modulo
// Integer division

Som du mest kommer att använda:

Exempel 4:a räknesätten

tal1 = 100
tal2 = 10

# 1. Addition
resultat = tal1 + tal2 

# 2. Subtraktion
resultat = tal1 - tal2 

# 3. Multiplikation
resultat = tal1 * tal2

# 4. Division
resultat = tal1 / tal2 









int och floats


resultat = 1 + 2 # 3 <class 'int'>

resultat = 3 / 4 # 0.75 <class 'float'>

resultat = 1 + 0.75 #1.75 <class 'float'>

resultat = 5 // 2 # 2 <class 'int'> 
# Med // avrundas divisionen till närmsta heltal (neråt) 









Prioriteringsregler

När man skriver uttryck med flera operatorer så måste det finnas regler för i vilken ordning de ska utvärderas. Precis som i matematiken är det viktigt att multiplikation och division genomförs innan addition och subtraktion. 

1. Parenteser

2. Potenser

3. Multiplikation/Division

4. Addition/Subtraktion

Exempel

# Vi tilldelar tre olika variabler var sitt värde
tal1 = 23, tal2 = 20, tal3 = 28

#Beräknar medelvärdet
medel = (tal1 + tal2 + tal3)/3

# Skriver ut medelvärdet till användaren
print("Medelvärdet är " + medel)












Beräkna medelvärdet av 3 st heltal

Modulo %

Ger rest vid heltalsdivision

Modulo %

print(10 % 8) # Skriver ut 2
print(15 % 4) # Skriver ut 3
print(60 % 30) # Skriver ut 0
print(240 % 13) # Skriver ut 6












Exempelområden

  • Udda eller jämnt nummer
  • Konvertera minuter till timmar
  • Ett slumptal ska vara innanför ett intervall

LOGIK

VILLKORSATSER

OCH

MÅL

  •  Använda True (sant) och False (falskt) 
  • Hur man använder villkor (if-satser) för gör att val mellan ett eller flera alternativ
  • Jämförelseoperatorer
  • Logiska operatorer

Villkor

Ett villkor är en fråga som man besvaras ja eller nej. Exempelvis är 2 större än 1? Det är alltså ett logiskt uttyck som kan antingen vara sant eller falskt.

I Python motsvarar det True eller False .

if-satsen är en enkel selektion som avgörs om villkoret är sant eller falskt.

Ditt program kan alltså ta olika vägar utifrån om uttrycket är True eller False.

If-satsen

Sats(er)

Villkor

FLÖDESSCHEMA

Sant

Falskt

PYTHONKOD

if villkor:

    sats(er)

Endast om villkoret är uppfyllt utförs sats(erna).

Tänk på att raden efter kolonet (:) måste vara indraget och tillhör pythons syntax. Indragningen avgör när en if-sats avslutas.  

Använda if-sats

if 2 > 1:
	#Om villkoret är SANT ska denna sats utföras
	print("2 är större än 1!!!")

# Ingen indragnong, if-satsen har avslutats
print("Ok lätt som en plätt. Programmet avslutas.")


VILLKOR

Operator

... är en symbol för något som ska utföras. Exempelvis plustecknet vid matematisk addition.

I Python finns flera olika operatorer. Vi ska utforska de aritmetiska (matematiska)-,  jämförelse-, logiska- och förändringsoperatorerna.

3 + 4

operand

operand

operator

bool

Bool är en förkortning för boolean och är döpt efter George Boole som studerade logik. Det är en datatyp som bara kan innehålla ett av värdena True (sant) eller False (falskt). Om vi skulle jämföra om 3 > 2 skulle detta ge True. 3 < 2 skulle ge False.

truthy = 3 > 2 # True
falsy = 3 < 2 # False

Jämförelseoperatorer

Jämförelse  Symbol Exempel Värde
    lika med == a == b False
   inte lika med != a != b True
     större än > a > b False
större än eller lika med >= a >= b True
mindre än < a < b  True
mindre än lika med <= a <= b  True

Tar in två värden och jämför dem. Exempel om a = 3, b = 5.

Värdena kan vara av vilken datatyp som helst int, float, str, bool. Komma bara ihåg att de du jämför med måsta vara av samma datatyp!

SÅ...

Vad är nu skillnaden mellan att använda

=

==

eller

Exempel bool

gameOver = False

If-else-satsen

Alternativ 1

Villkor

FLÖDESSCHEMA

Sant

Falskt

PYTHONKOD

if villkor:

    alternativ 1

else: 

    alternativ 2

 

If-else satsen är ett val mellan två alternativ, ett tvåvägsval. Till skillnad från if-satsen utförs även ett andra alternativ om villkoret är falskt.

Alternativ 2

Använda if-else-sats

if 2 > 1:
	#Om villkoret är SANT ska denna sats utföras
	print("2 är större än 1!!!")

# Ingen indragnong, if-satsen har avslutats
print("Ok lätt som en plätt. Programmet avslutas.")


VILLKOR

If-elif-else-satsen

Alternativ 1

Villkor

FLÖDESSCHEMA

Sant

Falskt

PYTHONKOD

if villkor:

    alternativ 1

else: 

    alternativ 2

 

If-else satsen är ett val mellan två alternativ, ett tvåvägsval. Till skillnad från if-satsen utförs även ett andra alternativ om villkoret är falskt.

Alternativ 2

11. Villkor med flera alternativ

Villkor med flera alternativ

if-else satsen kan endast hantera ett val mellan två situationer, SANT eller FALSKT.

I många situationer kan man behöva hantera tre eller fler eller fler alternativ.

Studera följande intervall:

Antal poäng Betyg
36 A
25 C
18 E

Använda if-elif-else-sats

if 2 > 1:
	#Om villkoret är SANT ska denna sats utföras
	print("2 är större än 1!!!")

# Ingen indragnong, if-satsen har avslutats
print("Ok lätt som en plätt. Programmet avslutas.")


VILLKOR

12. Logiska operatorer

Hur skapar du ett villkor som är SANT om en variabel X är större än 100 och mindre än 200 🤔?

Vad måste gälla?

Jo, att både X > 100 OCH X < 200!

Vi behöver alltså använda oss av två villkor.

Logiska operatorer

Logisk operator  Symbol Exempel Värde
OCH  && uttryck1
and
uttryck2
true om båda är sanna annars false
   ELLER  || uttryck1
or 
uttryck2
true om minst ett är sant, annars false
   INTE ! !uttryck false om uttrycket är sant, annars true

Används för att undersöka flera villkor samtidigt

OCH - &&



int X = Convert.ToInt32(Console.ReadLine());




if(X > 100 && X < 200) 
{
Console.WriteLine("Det okända talet är mellan 100 och 200");
} 
else {
Console.WriteLine("Utanför intervallet...");
}

Logiska operatorn som är  sann då endast alla uttryck är sanna (eng. AND)

Här måste X både vara större än 100 och mindre än 200 för att hela utrycket ska vara SANT.

ELLER - ||

bool solenSkiner = false;
double badTemperatur = 21;




if(solenSkiner || badTemperatur > 20) 
{
Console.WriteLine("Vi går och badar");
} 
else {
Console.WriteLine("Vi badar när solen skiner eller
badtemperaturen är över 21 grader");
}

Logiska operatorn som är SANT då minst ett av utrycken är sanna. 

Här räcker det att antingen solenSKiner är SANT eller badTemperatur är större än 20 för att hela uttrycket ska vara sant.

INTE - !

bool gameOver = false;



if(!gameOver) 
{
Console.WriteLine("Spelet avslutas");
} 
else {
Console.WriteLine("Du får fortsätta spela");
}

Logiska operatorn INTE, !, då FALSKT blir SANT, eller SANT blir FALSKT

Här blir gameOver = true och villkoret hamnar i "Spelet avslutas".

x = 10
formatted = f"I've told you {x} times already!"

Formatera strängar

/* Deklarera en variabel som hanterar
   text (datatypen string) */
string namn;

/* Input från användaren tilldelas 
   variabeln "namn" */
namn = Console.Readline();

// Output till användaren
Console.WriteLine("Hej " + namn + " !");

Exempel

Läs in text från användaren (input), tilldela värdet till en variabel och skriv ut variabelns värde till användaren (output)

if/else

Console.WriteLine("Vad är klockan nu?")
int tid = Convert.ToDouble(Console.ReadLine());




if(tid > 22) 
{
// Om SANT, så ska detta utföras
Console.WriteLine("Gå och lägg dig");
} 
else 
{
// Om FALSKT, så ska detta utföras
Console.WriteLine("Läs en bok");
}

använda relationsoperatorer

Är värdet i tid större 22? Om ja, SANT, annars FALSKT

if/else


int secret = 13;
int guess = Convert.ToInt32(Console.ReadLine());




if(guess == secret) 
{
Console.WriteLine("Congrats!");
} 
else {
Console.WriteLine("Try again...");
}

använda relationsoperatorer 

Jämförelse. Är värdet i guess lika med värdet i secret? Om ja, SANT, annars FALSKT

if/else


int age = Convert.ToInt32(Console.ReadLine());






if(age >= 18) 
{
Console.WriteLine("Du är myndig. Får ta körkört. Gå på krogen.");
} 
else {
Console.WriteLine("Du får vänta " + (18-age) + " år in du är 18 år.");
}

använda relationsoperatorer 

Är värdet i age är större än eller lika med 18? Om ja, SANT, annars FALSKT.

Flera if-satser och else


int points = Convert.ToInt32(Console.ReadLine());

if(points >= 36) 
{
Console.WriteLine("Betyg A");
} 
if(points >= 25) 
{
Console.WriteLine("Betyg C");
}
if(points >= 18) 
{
Console.WriteLine("Betyg E");
}
else {
Console.WriteLine("Snart klarar du.");
}

villkor med flera alternativ

Om points = 37, vad skrivs ut?

if/else if/else


int points = Convert.ToInt32(Console.ReadLine());

if(points >= 36) 
{
Console.WriteLine("Betyg A");
} 
else if(points >= 25) 
{
Console.WriteLine("Betyg C");
}
else if(points >= 18) 
{
Console.WriteLine("Betyg E");
}
else {
Console.WriteLine("Snart klarar du.");
}

villkor med flera alternativ

Om points = 37, vad skrivs ut? Skillnad mot förra exemplet?

Skillnad med else if-sats?

En if-sats kommer alltid att köras om villkoret är SANT.

En else if-sats kommer endast att köras om föregående villkor var FALSKA. D.v.s endast ett alternativ om minst ett av alternativen är sanna.

switch-satsen

en variant av if/else if/else-satsen

     int userChoice = Convert.ToInt32(Console.ReadLine());
     
     switch (userChoice)
            {
                case 1:
                    Console.WriteLine("Du har valt nr 1");
                    break;
                case 2:
                    Console.WriteLine("Du har valt nr 2");
                    break;
                case 3:
                    Console.WriteLine("Du har valt nr 3");
                    break;
                case 4:
                    Console.WriteLine("Du har valt nr 4");
                    break;
                default:
                    Console.WriteLine("Var god välj ett alternativ nr 1-4");
                    break;
            }

14. Introduktion till loopar

Repetitionssatser

Loopar används för att kunna köra ett block kod flera gånger. En iteration (=upprepning) är ett varv inuti en loop.

I denna kurs lär vi oss loopen för:

while

for

och

(de är snarlika, men lite olika syntax och användningsområden)

 

15. while-loopen

Exempel while-loop

string input;
bool run = true;

while(run == true) {
	
    Console.WriteLine("Vill du avsluta programmet? ja/nej");
    
	input = Console.ReadLine();

	if(input == "ja" {
    	run = false;
    } 
    
}

16. Förändringsoperatorer

Förändringsoperatorer

Operator  Symbol Exempel Samma som Om tal är 3, blir det
Uppräkning ++ tal++ tal = tal + 1 4
Nedräkning -- tal-- tal = tal -1 2

Enklare sätt att öka eller minska med 1.

while-loop

En while-loop körs så länge villkoret är uppfyllt

 int counter = 1;
 
 while(counter < 10)
   {
     counter++;
   }
   
 //Räknaren är 10
 Console.WriteLine(counter);
int counter = 1;
 
if(counter < 10)
   {
     counter++;
   }
   
 //Räknaren är 2
 Console.WriteLine(counter);
loop2

17. for-loopen

for-loopen

Initierar räknaren

Sker bara en gång

Kontrollerar räknaren

Sker innan varje loop

Ändrar räknaren

Sker efter varje loop

for-loopen fungerar likadant while-loopen, men här skrivs initiering, kontroll och uppräkning på samma rad.

 

for(int i = 1; i < 10; i++) 
{
 Console.WriteLine(i);
}
loop2

Exempel for-loop

// Läser in talet som det ska summeras till
int num = Convert.ToInt32(Console.ReadLine());

// Börja med att summan är 0
int sum = 0;

// Loopa från 1 upp till talet som det ska summeras till
for(int i = 1; i <= num; i++) {
	
    // Addera varje heltal till variabeln "sum" 
	sum = sum = i;
    
}

// Skriv ut resultatet till användaren
Console.WriteLIne("Talsumman för " + num + " är " + sum);

En for-loop som adderar alla tal upp till ett valfritt tal "num"

18. Nästlade loopar

Nästlade loopar

for(int i = 0; i < 10; i++) {
    
    for(int j = 0; j < i; j++) {
    
    	Console.Write("*");
        
    }
    
    Console.WriteLIne("");
    
}

Det går bra ha en loop i en loop, det kallas nästlade loopar. Här skriver den yttre loopen ut varje raden och den inre antal * som motsvar radnumret.

*

**

***

****

*****

******

*******

********

*********

19. Arrayer

Hur gör man om man vill hantera många värden? Exempelvis olika temperaturer under längre tid. Det blir opraktiskt att deklarera en variabel för varje värde.

Problemet

Använda en array, som är en slags lista som reserverar plats i minnet för flera värden på en gång.

Lösning

Arrayer

För att nå ett värde i arrayen måste man veta vilken plats i arrayen värdet ligger, detta kallas index

4  1 9 8 10 5 2 1 7
0 1 2 3 4 5 6 7 8

index

Obs! Startar på 0!

Denna array har storlek 9, från index 0 till 8

Värde

En array är en variabel som innehåller flera värden av samma typ. Det är en lista som lagrar flera värden och är praktisk för att hantera större mängder data. 

Deklarera en array

// En array som innehåller 3 element som är av datatypen string
string[] pokemons = {"Pikachu", "Wartotle", "Squirtle"};
  
// En array som innehåller 5 element som är av datatypen int
int[] numbers = {3, 4, 8, 8, 0};
  
  
  

När du vet vilka värden du vill ha från början (fördefinierad array).

Deklarera en array

När du inte vet vilka värden du har från början.

// En array av dataypen string som kan innehålla max 5 värden
string[] friends = new string[5];
 
// En array av dataypen int som kan innehålla max 10 värden
int[] numbers = new int[10];
 

Hämta ett värde från en array

//Deklarerar en int array med 5 platser och initerierar dess värden
int[] numbers = { 4, 1, 9, 8};

/* Hämtar värde från arrayen "number" på position 0 
   och tilldela till variabeln valuePos0 */
int valuePos0 = numbers[0];

/* Hämtar värde från arrayen "number" på position 3 
   och tilldela till variabeln valuePos3 */
int valuePos3 = numbers[3];

Console.WriteLine(valuePos0); // Skriver ut 4
Console.WriteLine(valuePos3); // Skriver ut 8

Tilldela ett värde i en array

//Deklarerar en int array med 5 platser och initerierar dess värden
int[] numbers = { 4, 1, 9, 8};

/* Tilldelar värdet för elementet i arrayen "numbers" 
   på position 0 till 43 */
numbers[0] = 43;

/* Tilldelar värdet för elementet i arrayen "numbers" 
   på position 3 till 59 */
numbers[3] = 59;

Console.WriteLine(valuePos0); // Skriver ut 43 (gamla värde 4 ersätts)
Console.WriteLine(valuePos3); // Skriver ut 59 (gamla värde 8 ersätts)

 for-loopar          arrayer 

//Deklararer en int array med 10 platser 
int[] numbers = new int[10];

 Console.WriteLine("Skriv in 10 st heltal:");

//1. Fyller en array med 10 st heltal genom att loopa genom varje index. 
// Metoden .Length ger oss längden på arrayen 
for (int i = 0; i < numbers.Length; i++)
{
 numbers[i] = Convert.ToInt32(Console.ReadLine());
            
}

//2. Skriver ut varje värde i arrayen från 1)
for (int i = 0; i < numbers.Length; i++)
{
  Console.WriteLine(numbers[i]);
}

20. Metoder

Metoder

  • Ändrar inte i funktion, bara i struktur
  • DRY-principen (Don't Repeat Yourself)
  • Handlar om att återvinna sin kod (eng refactoring)
  • Istället för att upprepa kod kan man anropa metoden ifråga
  • Kallas i vissa fall funktioner

Main-metoden

där programmet börjar

using System;

namespace Metoder
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

EN METOD - DÄR PROGRAMMET BÖRJAR -MÅSTE FINNAS!

Exempel på metod

using System;


namespace Metoder
{
    class Program
    {
        static void Main(string[] args)
        {
            //Skriv ut Simpsonfamiljen
            Console.WriteLine("Marge");
            Console.WriteLine("Maggie");
            Console.WriteLine("Homer");
            Console.WriteLine("Lisa");

            //Här händer en massa annat

            //Skriv ut Simpsonfamiljen
            Console.WriteLine("Marge");
            Console.WriteLine("Maggie");
            Console.WriteLine("Homer");
            Console.WriteLine("Lisa");
        }
    }
}

Upprepas. Bör "kapslas in"

Exempel på metod

using System;

namespace Metoder
{
    class Program
    {
        static void Main(string[] args)
        {

            //Metoden printSimpsonFamily anropas
            PrintSimpsonFamily();

            //Här händer en massa annat

            //Metoden printSimpsonFamily anropas, igen.
            PrintSimpsonFamily();

        }

        //Skriver ut Simpsonfamiljen
        static void PrintSimpsonFamily()
        {
            Console.WriteLine("Marge");
            Console.WriteLine("Maggie");
            Console.WriteLine("Homer");
            Console.WriteLine("Lisa");
        }
    }
}

Koden inkapslad i en metod

Metoden anropas från main-metoden

Metoden anropas från main-metoden

static är ett reserverat ord som vi kommer beröra senare

Reserverat ord. Metoden ger inte något tillbaka (returnerar) - vi återkommer om det!

using System;

namespace Game
{
    class Game
    {
        //Default character name
        static string CharacterName = "John Doe";
        
        static void Main(string[] args)
        {
            StartGame();
            NameCharacter();
            Console.ReadKey();
        }
        
        static void StartGame()
        {
            Console.WriteLine("Game Title");
            Console.WriteLine("Welcome to ...");
           
        }

        static void NameCharacter()
        {
            Console.WriteLine("What would you like your character's name to be?");
            CharacterName = Console.ReadLine();
            Console.WriteLine("Great! Your character is now named " + CharacterName);
        }

    }
}

EXEMPEL METODER

INFÖR TEXTÄVENTYR

using System;


namespace Game
{
    class Game
    {
      
        static void Main(string[] args)
        {
            
            Console.Write("A stranger approaches...");
            Dialog("Have you seen..?");
            Console.Write("1) Yes, 2) No, 3) Repeat the question");
            Console.ReadKey();
        }


        static void Dialog(string message)
        {
             Console.ForegroundColor = ConsoleColor.Cyan;
             Console.Write(message);
             Console.ResetColor();
        }
        
      

    }
}

Att ta in information i en metod - PARAMETER

Definiera en metod

Anropa en metod

21. Stränghantering

Escapesekvenser

Escape-sekvens Förklaring Exempel i kod Utseende i program
\n Ny rad "Album: \n The Wall"  Album
The Wall
\t  Infoga tabbavstånd "Album: \t The Wall"  Album           The Wall
\" Visa citattecken "Album: \"The Wall\"" Album: "The Wall"
\\ Visa ett bakvänt streck "Album: Pink Floyd \\The Wall" Album Pink Floyd\The Wall

Det bakvända snedstrecket / inleder något som kallas escapesekvens (flyktsekvens). Dessa är bra att känna till:

Få information om strängar!

  • Kom ihåg att en sträng kan hanteras som en array!
  • mening[2] - ta reda på tecken på index 2 i strängen (arrayen)
  • Length - få information om antalet platser i strängen (arrayen)
 string sentence = "Det här är en kort text";
 Console.WriteLine(sentence[0]); //Skriver ut plats 0 - D
 Console.WriteLine(sentence[9]); //Skriver ut plats 0 - r
 Console.WriteLine(sentence.Length); //Skriver ut antal tecken i strängen sentence

Användbara  metoder för strängar

Metod Förklaring
ToUpper() Gör alla tecken till versaler
ToLower()  Gör alla tecken till gemener
Contains(string value) Ger true/false om value finns i strängen
IndexOf(char value) Ger positionen för value
Substring(int startindex, int length) Ger delsträngen från startindex till antal tecken length
Trim() Tar bort whitespace innan och efter

Exempel på metoder för strängar

    string sentence = "  Det här är en kort text  ";
            
    string upper = sentence.ToUpper();
    Console.WriteLine(upper);

    string lower = sentence.ToLower();
    Console.WriteLine(lower);

    bool contains = sentence.Contains("text");
    Console.WriteLine(contains);
    contains = sentence.Contains("txt");
    Console.WriteLine(contains);

    int index = sentence.IndexOf("D");
    Console.WriteLine(index);

    string substring = sentence.Substring(3, 5);
    Console.WriteLine(substring);

    string trimmed = sentence.Trim();
    Console.WriteLine(trimmed);

Programkod

Utskrift i konsolen

23. Flödesdiagram

att planera sin kodning...

Vad är en algoritm?

Algoritm

En algoritm består av begränsat antal instruktioner som ska utföras för att lösa ett problem

Pseudokod & Flödessdiagram

  • Om en algoritm uttrycks på vårt vanliga språk kallas det för pseudokod
  • Ett flödesdiagram visar med symboler hur ett problem ska lösas och ger en bra överblick

Att lättare förstå hur ett problem ska kunna lösas innan det översätts till programspråk

Flödesdiagram

En algoritm kan delas upp i ett begränsat antal instruktioner. Varje instruktion illustreras med en symbol som förbinds med pilar.

Start eller stopp

Något utförs

Ett val mellan två alternativ (selektion)

sats

sats

sats

sats

sats

sats

sats

sats

sats

sats

villkor

sant

falskt

SEKVENS

SELEKTION

ITERATION

villkor

sant

falskt

Flödesdiagram på verkligt problem!

Start

Stopp

Läs i tal1

Läs i tal2

Skriv tal1

Skriv tal2

tal1>tal2

sant

falskt

FLÖDESDIAGRAM

PSEUDOKOD

Uppgift: Jämföra två inmatade tal och skriva ut det tal som är störst

Läs in två tal, tal1 och tal2

Om tal1 är större än tal2

  skriv ut tal1

annars

  skriv ut tal2

Övning

Flödesdigram: Hur gjorde du frukost imorse?

23. Namnkonventioner

Namnkonventioner C#

Variabelnamn och argument

Metoder (och allt annat)


 int currentScore; 
 string firstName;

Använd camel-case!


static void SayMessage() {

  Console.WriteLine("Hey!");

}

Använd pascal-case!

Hur man kommentera en metod

 		
   /**
   * Den här metoden frågar efter användarens karaktärsnamn
   * och sedan skriver ut karaktärsnamnet i konsolen. 
   * Utskriften är grön då namnet efterfrågas.
   * @param - 
   * 
   * @author Sandra Larsson
   * @since  2019-12-10
   */
   static void NameCharacter()
   {

   Console.WriteLine("You need a code name for this mission. What will it be?");
   Console.ForegroundColor = ConsoleColor.Green;
   Console.Write("Enter your code name: ");
   CharacterName = Console.ReadLine();
   Console.ResetColor();
   Console.WriteLine("Your code name is confirmed to be " + CharacterName);

   }

24. Metoder med return

få tillbaka ett värde från en metod

Ordval

Metoder och Funktioner är egentligen samma sak. 

En metod är en funktion som är associerad till en klass. 

I C# har vi bara klasser, därav har vi använt oss av den bedömningen.

  • En funktion (eller metod) är en subrutin, procedur, subprogram som anropas för att utföra en viss uppgift oberoende av resten av koden.
  • Man skickar oftast med parametrar (argument) som input till funktionen/metoden.
  • En funktion (eller metod) kan också returnera ett värde. Till exempel resultatet av en beräkning som skett i kodblocket inne i funktionen/metoden.

Metoder med return

  • Används när vi vill returnera ett värde  från metoden. 
  • Man kan säga att metoden "skickar tillbaka ett värde"
  • Om man använder return sätter man inte void, utan den datatyp som returneras (returtyp)
static string sayHi(string name)
        {
            string greeting = "Welcome " + name;
            return greeting;
        }
        
        
        
        
 static void Main(string[] args)
        {
             string text = sayHi("John"); // Metoden anropas
             Console.WriteLine(text); // Skriver ut "Welcome John"
        }

Returnerar värdet greeting

Parameter till metoden

Ger ett värde tillbaka utifån argumentet "John"

Metoder med return


        static void Main(string[] args)
        {
            int sum = addNumbers(5, 2);
            Console.WriteLine(sum);    
        }
        
         static int addNumbers(int a, int b)
        {
            int sum = a + b;
            return sum;
        }     
       
       
 

Samma returtyp

Flera parametrar separeras med komma

Ingen retur, använd void

       
       
       
       
       static void sayHi(string name)
        {
            Console.WriteLine("Welcome " + name);
        }

        static void Main(string[] args)
        {

           sayHi("John"); // Metoden anropas
           // och skriver ut "Welcome John" 
        }

Metod som inte returnerar ett värde

25. Variablers räckvidd (eng. scope)

Lokala variabler


static void Main(string[] args)
   {
       int sum = addNumbers(5, 2);
       Console.WriteLine(sum);    
   }
        
static int addNumbers(int a, int b)
   {
       int sum = a + b;
       return sum;
   }     
       
       
 

Variabler som deklarers inne i en metod kallas lokala variabler. D kan inte användas utanför metoden. Detsamma gäller parametarna till metoden.

 

En variabel i en metod har alltså  inte något samband med variabler i en annan metod

Variabler räckvidd eng. scope

class Program
{
    static int x = 10;
    Console.WriteLine(a + b); //Error

    static int addNumbers(int a, int b)
      {
         int sum = a + b;
         return sum;
      }


    static void Main(string[] args)
	{
           Console.WriteLine(x); // OK
	   Console.WriteLine(sum); //Error
	}
}
       
 

Globalt scope

Lokalt scope

Variablers giltighet (synlighet) gäller i det block de är deklarerade och i alla underblock, men ej de överordnade blocken.

Lokalt scope

26. Rekursiva metoder

Rekursiva metoder

  • En rekursiv metod är en metod som anropar sig själv
  • Ett alternativ till loopar
  • En rekursiv lösning kan ge en enkel lösning till annars svåra problem
 static void countDown(int n)
        {
            Console.WriteLine(n);

            if(n <= 1)
            {
                // Basfallet
                return;
            } else
            {	
                // Metoden anropar sig själv
                countDown(n - 1);
            }

        } 
            
 static void Main(string[] args)
        {
           // Metoden körs
           // Skriver ut 5,4,3,2,1 
            countDown(5);
        }

Exempel på rekursiv metod

En rekursiv metod måste ha ett basfall som talar om när algoritmen är klar.

Metoden anropar sig själv tills den når basfallet.

Beräkna talsumma med rekursion

Exempel: Talsumman för 5 = 5 + 4 + 3 + 2+ 1

s(1) = 1                                           

s(2) = 2 + 1                                  = 2 + s(1)

s(3) = 3 + 2 + 1                            = 3 + s(2)

s(4) = 4 + 3 + 2 + 1                      = 4 + s(3)

s(5) = 5 + 4 + 3 + 2 + 1                = 5 + s(4)

.....

s(n) = n + s(n-1)

En rekursiv definition till ett problem innehåller basfallet och hur problemet kan lösas genom ett eller flera mindre delproblem

27. Sortering- & Sökningsalgortimer

En algoritm är en begränsad uppsättning instruktioner som ska utföras i tur och ordning för att lösa en given uppgift

I C# finns det redan färdiga metoder för sortering- och sökning. Men det är bra att ha underliggande kunskap om hur de fungerar!

Infogande sortering

Bubbelsortering

Binär sökning

28. Listor

Listor

  • En nackdel med arrayer är att det är besvärligt att lägga till och ta bort data om dessa inte ligger sist i arrayen.
  • En annan nackdel är att dess storlek måste bestämmas när arrayen skapas. 

En lagringstruktur med fler möjligheter än en array.

Listor

// Deklarera en lista
List<int> numbers = new List<int>();
  • Kan ses som en array, men där det finns ett tillägg av praktiska metoder för att hantera listor
  • Till skillnad från en array kan en lista krympa eller växa i storlek

Du måste ange datatypen på två ställen

Listor

// Inkludera denna högst upp!
using System.Collections.Generic;
using System.Linq;

Metoder för listor

Metod  Förklaring
Add(element) Lägger till ett element sist i listan
AddRange(elements) Lägger till flera element samtidigt
Insert(pos, element) Infogar elementet element i listan i den position som anges av pos.
RemoveAt(pos) ​Tar bort ett element från listan i den position som anges av pos
Sort() Sorterar en lista i stigande ordning (numerisk eller alfabetisk ordning)
IndexOf(element) Hittar ett element i listan. Returnerar -1 och den inte hittades.
BinarySearch(element) Hittar ett element i listan. Listan måste vara sorterad innan denna metod appliceras.
Clear() Tömmer listan på dess innehåll
Count Ger antalet element i listan

foreach

passar bra för att söka igenom en lista

List<String> pokemons = new List<string>() {
            "Pikachu",
            "Spearow",
            "Eevee"
        }; // Lista med fördefinerade värden

foreach (string element in pokemons)
{
  Console.WriteLine(element); 
 // Skriver ut Pikachu, Spearow, Eevee
}
List<String> pokemons = new List<string>();
pokemons.Add("Pikachu");
Console.WriteLine(pokemons[0]); // Skriver ut Pikachu
string[] morePokemons = { "Eevee", "Squirtle" };

foreach(string element in pokemons)
{
 Console.WriteLine(element); // Skriver ut Pikachu, Eevee, Squirtle
}

pokemons.RemoveAt(2);
pokemons.Insert(1, "Spearow");
int posEevee = pokemons.IndexOf("Eevee");
Console.WriteLine(posEevee); //Skriver ut 2
            
foreach (string element in pokemons)
{
  Console.WriteLine(element); // Skriver ut Pikachu, Spearow, Eevee
}
pokemons.Sort();

foreach (string element in pokemons)
{
  Console.WriteLine(element); // Skriver ut Eevee, Pikachu, Squirtle
}

int posPikachu = pokemons.BinarySearch("Pikachu");
Console.WriteLine(posPikachu); // SKriver ut 1

Exempel Listor

Varför använda array när man kan använda en lista?

  • Om du har en fix storlek på din lista och du inte behöver metoderna, använd dig av en array!
  • En array blir på så sätt effektivare i minneshantering än en lista.

"Varför köra truck, om du endast behöver en liten och snabb bil?"

29. Slumptal

Slumptal

//Skapa en randomerare som jag kan slumpa tal med
Random randomerare = new Random();

//Slumpa ett tal mellan 0 och 19
int tal = randomerare.Next(20);

//Slumpa ett tal mellan 15 och 31
int nyttTal = randomerare.Next(15, 32);

Får du "bra" slumptal?

SLASK Programmering 1 Python

By Sandra Larsson

SLASK Programmering 1 Python

The hole shabang

  • 167