Skip to content

tutorial_python

larsgrim edited this page Aug 16, 2020 · 15 revisions

I forelesning skal vi bruke trinket.io sin online editor.

Kom i gang med Python

I dette kurset skal vi kode i Python. Python er et populært skriptprogrammeringsspråk som brukes innen mange fagområder, inkludert robotikk. Språket brukes også i de fleste av REALTEKs programmeringskurs, og er å finne på de fleste datasalene på NMBU. Du kan også laste ned Python på din egen maskin, det er gratis. Har du Linux eller Mac, har du mest sannsynlig allerede Python installert.

Eksempler fra forelesning, finner du her.

I guiden under bruker vi IDLE, men du kan også bruke en annen IDE (Integrated Development Environment). Her er for eksempel en online editor du kan bruke.

Hello world!

Åpne IDLE, og velg file->new. Et nytt vindu dukker opp. Dette er skriptet ditt. Her skal du kode.

Nå skal vi skrive vårt første program. Programmet skal skrive "Hello world!" til konsollen. Slik ser programmet ut:

print("Hello world!")

Skriv linjen ovenfor i skriptet ditt. print-kommandoen brukes for å skrive til konsoll. Velg Run->Run Module. Om du ikke allerede har gjort det, vil du nå bli bedt om å lagre skriptet ditt. Gi skriptet et passende navn, for eksempel hello_world.pyog trykk save. Nå vil programmet kjøre. Om alt går bra, skal teksten Hello world! dukke opp i konsollen. Gratulerer, du har nå skrevet ditt første Python-skript!

Kommentarer

Når du skriver kode, kan det noen ganger være greit å legge til forklarende tekst, eller "kommentarer". I Python ser kommentarer slik ut:

# This is a single-line comment

"""
This is
a multi-line
comment
"""

Kommentarer ignoreres av tolkingsprogrammet som tolker koden din når du kjører programmet (f.eks trykker Run Module). Kjører du eksempelet over, skjer derfor ingenting. Som en hovedregel er det lurt å skrive den faktiske koden så lesbar som mulig, og begrense bruken av kommentarer til et minimum.

Datatyper, variabler og matte

I python behøver vi ikke å deklarere datatypen til en variabel før vi bruker den. Skriver vi a=4, er a et heltall. Skriver vi a=4.0 (eventuelt a=4.), er a et desimaltall. Skriver vi a="hurra!" (eventuelt a='hurra!'), er a en streng (tekst-variabel). Skriver vi a=[1,3,5,2], er a en liste med tall, osv.

Matte kan for eksempel se slik ut:

a = 4
b = 6
c = a+b
print(a, "+", b, "=", c)

Her er annet eksempelprogram som printer resultatet av ulike matematiske operasjoner til konsoll

print("5+2=", 5+2)        # Addisjon
print("5-2=", 5-2)        # Subtraksjon
print("5*2=", 5*2)        # Multiplikasjon
print("5/2=", 5/2)        # Divisjon med heltall vil resultere i et heltall i Python2, desimaltall i Python3
print("5.0/2=", 5.0/2)    # Divisjon hvor minst ett tall er et desimaltall, vil resultere i et desimaltall
print("5**2=", 5**2)      # Potens
print("5.//2", 5.//2)     # Divisjon med nedrunning (resulterer i heltall)
print("5. % 2", 5. % 2)   # Modulo (rest etter divisjon)

Lister

En liste er en ordnet samling med objekter. Eksempelet under viser hvordan vi kan bruke lister. I eksempelet har vi en liste med heltall. Vi kunne også brukt strenger, boolske variabler osv.

my_number_list [2,4,6,1,8]
print(my_number_list[0])       # Prints first element in list
print(my_number_list[1])       # Prints second element in list
print(my_number_list[-1])      # Prints last element in list
print(len(my_number_list))     # Prints length of list

Det er også fullt mulig å ha ulike typer objekter i samme liste, som strenger, tall og andre lister osv.

mixed_list = [1, "this is some text", True, [1,2,3,4], -9.99]

Eksempelet under viser hvordan du henter ut et element i en liste, og også hvordan du endrer et element i en liste

animals = ["horse", "cat", "bird", "unicorn"]
print(animals[0])                                # Prints "horse"
animals[1] = "fly"                               # Replaces "cat" with "fly"

Om du vil legge til ett element på slutten av listen:

cities = ["Bergen", "Oslo", "Stavanger"]
cities.append("Kautokeino")
print(cities)

Om du vil legge en liste til en annen liste

cities = ["Bergen", "Oslo", "Stavanger"]
more_cities = ["Kautokeino", "Ski"]
cities.extend(more_cities)
print(cities)

Om du vil lage en ny liste av de tre første elementene i en annen liste:

cities = ["Bergen", "Oslo", "Stavanger", "Kautokeino"]
fewer_cities = cities[0:3]
print(fewer_cities)

Det finnes mange, mange flere listeoperasjoner enn de som er nevnt her.

Import

En modul er en fil med Python-kode. Vi kan importere moduler og benytte oss av innholdet. Her er et eksempel hvor vi benytter oss av kode fra modulene random og time.

import random
import time

print(random.random())        # Prints a random float number between 0 and 1
time.sleep(2)                 # Pauses execution for 2 seconds
print(random.randint(0,100))  # Prints a random integer between 0 and 100
time.sleep(4)                 # Pauses execution for 4 seconds
print(time.gmtime().tm_mon)   # Prints current month

Input fra bruker

Eksempelet under spør bruker om input via konsoll. Det brukeren skriver, lagres her i variabelen "input_text". Programmet bruker deretter denne variabelen når den lager et svar til brukeren, "output_text". Dette svaret printes så til konsoll.

input_text = input("Please input a funny joke: ")
output_text = input_text + "? ...I don't get it"
print(output_text)

input() returnerer en streng, selv om bruker skriver inn tall. Om vi ønsker oss et tall fra bruker, må vi derfor konvertere strengen til et tall. Dette kan vi gjøre med funksjonen int() om vi ønsker et heltall, eller float() om vi ønsker et desimaltall.

input_number_string = input("Give me a number: ")
input_number = float(input_number_string)
output_number = input_number + 2
print("I added 2 to your number. The result is", output_number)

If-test

Vi bruker en if-test når vi ønsker å kjøre en bit med kode kun om en eller flere gitte betingelse er oppfylt. Et eksempel kan være å informere bruker hvis (og bare hvis) batterinivået på roboten vår er under en spesifisert terskel. I Python kan dette for eksempel se slik ut:

if low_battery:
    print("Battery level is low")

print("I am a robot")

I dette eksempelet er battery_low en boolsk variabel, det vil si at verdien til variabelen enten er True eller False. I Python bruker vi innrykk for å definere hvilke linjer med kode som skal kjøres om betingelsen for if-testen er oppfylt. I eksempelet over ser vi at teksten "Battery level is low" kun skrives ut til bruker om low_battery er True, men teksten "I am a robot" printes ut uavhengig av om low_battery er True eller False. I mange andre språk, som for eksempel C++ eller Java, ville kode tilhørende en if-test vært definert ved at den hadde vært på innsiden av spesialtegn som for eksempel { code goes here }.

I eksempelet under har vi et heltall user_guess. Vi vil gi ulike tilbakemeldinger til bruker avhengig av verdien til dette tallet. Om vi ønsker å teste for andre betingelser i tilfellet hvor betingelsen i den opprinnelige if-testen ikke er oppfylt, kan vi gjøre dette med elif (else if). Vi kan ha så mange elif-tester vi vil, men disse vil kun bli sjekket om betingelsen i den opprinnelige if-testen, og eventuelle tidligere elif-tester, ikke er oppfylt. Til sist kan vi velge å legge til else. Koden tilhørende else kjøres i tilfellet hvor ingen if- eller elif-tester, har blitt evaluert til True.

secret_number = 4
user_guess = int(input("Guess a number between 1-10: "))

if (user_guess == secret_number):
    print("You guessed the secret number!")
    
elif user_guess < 1 or 10 < user_guess:
    print("Your guess is outside the legal range.")
    
else:
    print("That wasn't the secret number. Better luck next time!")

Legg merke til at vi bruker to likhetstegn == når vi sjekker om to variabler har samme verdi. Krokodilletegn < og > brukes for å sjekke om et verdien til en variabel er mindre enn og større enn verdien til en annen variabel. Her er en komplett liste.

==	# Equal	                    x == y	
!=	# Not equal	            x != y	
>	# Greater than	            x > y	
<	# Less than	            x < y	
>=	# Greater than or equal to  x >= y	
<=	# Less than or equal to     x <= y

Når vi bruker operatorene over, vil resultatet være enten True eller False. Vi kan bruke logiske operatorer for å binde sammen flere tester, eller til å snu resultatet av en test.

if not full_battery:
    print("Battery is not full")

Hvis full_battery er false, er not full_battery true, altså er betingelsen til if-testen oppfylt og tekst printes ut til pruker.

i secret_number-eksempelet brukte vi or for at betingelsen for (el)if-testen skulle evalueres til True enten om user_guess var lavere eller høyere enn tillat. Tilsvarende kan vi bruke and når vi krever at flere betingelser skal være oppfylt for at uttrykket skal evalueres til True.

Her er noen eksempler du kan kjøre:

print("Ture or True =", True or True)        # True
print("Ture or False =", True or False)      # True
print("False or False =", False or False)    # False

print("Ture and True =", True and True)      # True
print("Ture and False =", True and False)    # False
print("False and False =", False and False)  # False

For-løkke

For-løkker brukes når man ønsker å kjøre en bit kode et gitt antall ganger. I eksempelet under vil tellevariabelen i skrives til konsoll 14 ganger. Første gang i skrives ut, er verdien 0, deretter øker i med 1 for hver runde gjennom løkken.

for i in range(14):
    print(i)

Innrykk definerer hvilke linjer med kode som hører til for-løkken.

I eksempelet under vil i først ha verdien 4, deretter vi verdien øke med 2 for hver iterasjon gjennom løkken. Vi itererer gjennom løkken så lenge i er mindre enn 10.

for i in range(4, 10, 2):
    print(i)

While-løkke

En while-løkke brukes når vi ønsker å gjenta en bit kode så lenge et uttrykk evalueres til True. I eksempelet under tildeler vi variabelen n tilfeldige verdier mellom 0 og 100. Deretter skriver vi verdien av n til konsollen. Dette gjentas frem til n tar verdien 8. Da evalueres uttrykket i while-løkken til False, og vi hopper ut av løkken.

import random

n = 0
while n != 8:
    n = random.randint(0, 100)
    print(n)

Øvingsoppgaver

Her er noen øvingsoppgaver du kan bryne deg på.

Oppgave 1

Skriv et program som skriver ut alle heltall i intervallet fra og med 0 til og med 99 til konsoll.

Oppgave 2

Skriv et program som tar inn to tall fra bruker, og skriver ut summen av disse til konsoll.

Oppgave 3

Skriv et program som skriver ut alle partall som befinner seg i intervallet 1 til 100 til konsoll.

Oppgave 4

Skriv et program som spør om brukerens alder, og som regner ut hvilket år brukeren blir 100 år gammel.

Oppgave 5

Skriv et program hvor en bruker får tre forsøk på å gjette et hemmelig ord. Før brukerens første forsøk på å gjette det hemmelige ordet, skal brukeren få et hint. Etter det skal brukeren få ett nytt hint for hvert gale svar.

Oppgave 6

Skriv et program som genererer et tilfeldig heltall mellom 1 og 100 som brukeren skal gjette. For hvert gale svar, skal programmet ditt informere bruker om det hemmelige tallet er større eller mindre enn det som ble gjettet. Bruker får så mange forsøk som trengs for å gjette tallet. Det hemmelige tallet skal ikke endre seg underveis.

Oppgave 7

Skriv et program som tar inn et tall fra brukeren, og sier i fra om tallet går opp i 3 (er delbart uten rest).

Oppgave 8

Lag et "stein, saks, papir"-spill. Du velger selv om du vil lage et spill hvor to brukere spiller mot hverandre, eller om du lager et spill hvor én bruker spiller mot PC-en. Etter hvert spill skal programmet informere om hvem som vant, eller om resultatet var uavgjort.

Oppgave 9

Bruker tenke på et tall mellom 1 og 100. Deretter skal PC-en prøve å gjette det hemmelige tallet. Etter hvert mislykkede forsøk på å gjette tallet, skal bruker svare enten "lower" eller "higher". Svaret skal gjøre det lettere for PC-en å gjette riktig på neste forsøk. Når PC-en til slutt gjetter det riktige tallet, svarer bruker "correct" og programmet avsluttes.