Skip to content
Snippets Groups Projects
Commit f78104da authored by majidrouhanintnu's avatar majidrouhanintnu
Browse files

upd

parent 9ccbff2b
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
### MySQL database
Man kan koble opp mot forskjellige databaser i Python:
- GadFly
- mSQL
- **MySQL**
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
-
Eller bruke SqlLite3
- Egen database modul for Python
%% Cell type:code id: tags:
``` python
# Viser hvordan vi kobler oss mot SQLite og leser/oppdaterer data.
# Importerer modulen sqlite3 (trenger ikke installasjon)
import sqlite3 as sql
```
%% Cell type:code id: tags:
``` python
# Oppretter en tilkobling til databasen
# Hvis databasen ikke eksisterer, opprettes den
# Hvis databasen eksisterer, kobler vi oss til den
connection = sql.connect('database_name.db')
```
%% Cell type:code id: tags:
``` python
# Oppretter en cursor som lar oss utføre SQL-kommandoer
# Cursor er en peker som lar oss utføre SQL-kommandoer
# En peker er en variabel som inneholder en adresse til et objekt
cursor = connection.cursor()
```
%% Cell type:code id: tags:
``` python
# Oppretter en tabell
# Hvis tabellen ikke eksisterer, opprettes den
# Hvis tabellen eksisterer, opprettes den ikke på nytt
# Vi kan bruke f-strings for å sette inn variabler i SQL-kommandoer
table_name = 'brukere'
create_table = f'''
CREATE TABLE IF NOT EXISTS {table_name} (
id INTEGER PRIMARY KEY,
name TEXT
)
'''
cursor.execute(create_table)
```
%% Output
<sqlite3.Cursor at 0x1b1563627c0>
%% Cell type:code id: tags:
``` python
# Definer data som skal settes inn i tabellen
# Liste med tupler
user_data = [
(1, 'John'),
(2, 'Jane'),
(3, 'Alice')
]
# Insert the data into the table
# Vi kan bruke f-strings for å sette inn variabler i SQL-kommandoer
# Vi kan bruke executemany for å sette inn flere rader samtidig
cursor.executemany(f'''
INSERT OR REPLACE INTO {table_name} (id, name)
VALUES (?, ?)
''', user_data)
```
%% Output
<sqlite3.Cursor at 0x1b1563627c0>
%% Cell type:code id: tags:
``` python
# Henter ut data fra tabellen
# Vi kan bruke f-strings for å sette inn variabler i SQL-kommandoer
# Vi kan bruke * for å hente ut alle kolonner
# Vi kan bruke WHERE for å filtrere data
# Vi kan bruke ORDER BY for å sortere data
# Vi kan bruke LIMIT for å begrense antall rader
# Vi kan bruke OFFSET for å hoppe over rader
# Vi kan bruke LIKE for å filtrere data med et mønster (wildcard)
# Vi kan bruke IN for å filtrere data med flere verdier
# Vi kan bruke IS NULL for å filtrere data som er NULL
# Vi kan bruke IS NOT NULL for å filtrere data som ikke er NULL
# Vi kan bruke DISTINCT for å filtrere ut duplikater
# Vi kan bruke COUNT for å telle antall rader
cursor.execute(f'SELECT * FROM {table_name}')
# Fetch all rows as a list of tuples
rows = cursor.fetchall()
# Print the rows
# Vi kan bruke for-løkke for å iterere over resultatet
for row in rows:
print(row)
```
%% Output
(1, 'John')
(2, 'Jane')
(3, 'Alice')
%% Cell type:code id: tags:
``` python
# Oppdaterer data i tabellen
connection.commit()
# Lukker tilkoblingen til databasen
connection.close()
```
%% Cell type:markdown id: tags:
## Oppgave a)
Lag en ny tabell og kall den **emner**. Definer emnekode, tittel og beskrivelse (alle av typen streng).
%% Cell type:code id: tags:
``` python
# Svar
```
%% Cell type:markdown id: tags:
## Oppgave b
Endre i tabellen "brukere" slik at det er en kobling mellom "brukere" og "emner". Nøkkel kan være emnekode.
%% Cell type:code id: tags:
``` python
# Svar
```
%% Cell type:markdown id: tags:
## Oppgave C
Skriv kode som fyller tabellen emner med data fra en liste. Oppdater tabellen brukere slik at hver bruker peker på en eller flere emner.
%% Cell type:code id: tags:
``` python
# Svar
```
# Lab-2
## Læringsutbytte
* Kunne skrive enkle matematiske uttrykk i Python
* Lære å definere funksjoner i Python
* Kunne sette opp logiske uttrykk
* Lære å bruke if-setningen i Python.
## Læringsaktiviteter
* [Funksjoner og kalkulasjoner](funksjoner_og_kalkulasjoner.ipynb)
* [Logiske operatorer og uttrykk](logiske_operatorer_uttrykk.ipynb)
* [Valg](ulike_typer_if_setninger.ipynb)
* [Årstider](aarstider.ipynb)
%% Cell type:markdown id: tags:
# Generelt om filbehandling
# Lotto
**Læringsmål:**
- Filbehandling
- Betingelser
- Løkker
I denne oppgaven skal vi skrive til en fil og lese fra en fil.
* Lister
* Tilfeldige tall
%% Cell type:markdown id: tags:
## Generelt om filer
Det kan være lurt å lese dette før du går videre
%% Cell type:markdown id: tags:
Det er ofte nyttig å kunne lagre data til en fil, eller lese data fra en fil når man skriver et program i Python. De mest brukte funksjonene er for åpning, redigering og lukking av eksterne filer.
I denne oppgaven lage du lage en lottosimulator.
Når du åpner filen må du spesifisere hvordan du skal bruke filen. Det er derfor viktig å åpne filen på riktig måte. Måten dette gjøres på er som inn-parameter i `open()`-funksjonen, noen eksempler er:
Reglene er som følger:
- **'r'** - for lesing av filen (default)
- **'w'** - for skriving til filen
- **'a'** - for å legge til data (**a**ppend) til den eksisterende filen
* Det trekkes ut 7 lottotall og 3 tilleggstall fra og med 1 til og med 34. Alle tallene som trekkes skal være unike.
* Premier deles ut basert på følgende tabell:
I denne oppgaven skal vi bli bedre kjent med hvordan dette fungerer:
- For å åpne en fil i Python kan vi skrive: `f = open('filename', Bruksmåte)`. Bruksmåte er enten `'r'`, `'w'` eller `'a'` avhengig av hva hvordan filen skal brukes.
- For å lese data fra en fil kan vi bruke: `innhold = f.read()`
- For å legge til data til en fil kan vi skrive: `f.write(data)`
Filer lukkes på følgende måte: `f.close()`
Premiergruppe|Premie (kr)
:---|---
7 rette |2 749 455
6 rette + 1 tilleggstall |102 110
6 rette |3 385
5 rette |95
4 rette + 1 tilleggstall |45
%% Cell type:markdown id: tags:
### Lesing av fil
## Oppgave a: frivillig
%% Cell type:markdown id: tags:
Eksempelet under viser lesing av en fil. **Kjør koden under og test det ut da vel!**
Lag en liste som heter `numbers` og som inneholder alle heltall fra og med 1 til og med 34.
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
# LESING AV FIL
f = open('example_file1.txt','r') #r spesifiserer at man skal lese fra en fil
innhold = f.read()
print(innhold)
f.close()
```
%% Output
Dette er en eksempelfil.
Her kan man skrive hva man vil.
Men helst ikke for mange hatefulle ytringer.
%% Cell type:markdown id: tags:
Når man leser en fil slik som over, må man lagre innholdet i en variabel (her bruker vi `innhold`). **Husk alltid å lukke filen!**
Den filen som ble lest fra finner dere her: [example_file1.txt](example_file1.txt). Prøv å endre på filen, lagre den med `file -> save` i toppmenyen for så å kjøre kodeblokken over på nytt. Kodeblokken burde da skrive ut det nye innholdet i filen!
## Oppgave b: frivillig
%% Cell type:markdown id: tags:
### Skriving av fil
Lag en liste som heter `my_guess` med 7 tall. Denne listen inneholder tallene som du tipper.
%% Cell type:markdown id: tags:
For å skrive til en fil kan man gjøre slik som under. **Kjør koden under og test!**
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
f = open('example_file1.txt','w') #w spesifiserer at filen skal skrives til
f.write('En hatefull ytring')
f.close()
```
%% Cell type:markdown id: tags:
Etter at du har kjørt koden over vil du kunne se at innholdet i [example_file1.txt](example_file1.txt) har endret seg. Hvis du vil kan du bytte ut `'w'` over med `'a'` og se hva som da skjer.
## Oppgave c: frivillig
%% Cell type:markdown id: tags:
### Context managers
Lag en funksjon som tar inn `n` som argument og som trekker ut `n` tall ut av listen `numbers` og legger de i en egen liste.
For å gjøre ting tilfeldig: `import random` og `random.randint(n,N)` gir tilfeldige tall fra og med n til og med N.
%% Cell type:markdown id: tags:
Eksempel på kjøring:
Det er generelt foretrukket i python å bruke _context managers_ når man gjør operasjoner som å skrive til og lese fra fil. De tar hånd om lukking av fila når du er ferdig, og passer på å lukke også dersom koden crasher underveis i en operasjon. Da kan vi være trygge på at vi ikke får korrupte filer.
```python
>>>print(draw_numbers(numbers, 7))
[16, 33, 5, 20, 7, 4, 8]
```
Åpning og lukking av filer med context managere gjøres som følger
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
with open('example_file.txt', 'w') as writefile:
writefile.write("En hyggelig kommentar")
with open('example_file.txt', 'r') as readfile:
innhold = readfile.read()
print(innhold)
```
%% Output
En hyggelig kommentar
%% Cell type:markdown id: tags:
Man kan også åpne og lukke flere filer i gangen
#### Hint
%% Cell type:code id: tags:
%% Cell type:markdown id: tags:
``` python
with open('example_file.txt', 'r') as file_0, open('example_file1.txt', 'r') as file_1:
innhold_0 = file_0.read()
innhold_1 = file_1.read()
print(innhold_0, innhold_1, sep="\n---\n")
```
Hint: Bruk funksjonene `pop()` og `append()` for å fjerne og legge til elementer i en liste. Husk at pop fjerner et element i en indeks i lista, den fjerner ikke tallet. Så numbers.pop(rand_num) fjerner elementet på indeks rand_num - altså hvis rand_num er 13 fjernes tallet på indeks 13, ikke tallet 13!
%% Output
%% Cell type:markdown id: tags:
En hyggelig kommentar
---
Dette er en eksempelfil.
Her kan man skrive hva man vil.
Men helst ikke for mange hatefulle ytringer.
## Oppgave d: frivillig
%% Cell type:markdown id: tags:
## a)
Lag funksjonen `comp_list` som sammenligner to lister med tall. Antall like tall i listene skal returneres.
%% Cell type:markdown id: tags:
Eksempel på kjøring:
Lag en funksjon `write_to_file(data)` som tar inn strengen `data` og legger denne inn i en fil **my_file.txt**
```python
>>>print(comp_list(draw_n_umbers(numbers,7),my_guess))
1
```
***Skriv din kode i kodeblokken under***
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Hvis du lurer om du gjorde riktig kan du kalle funksjonen og sjekke innholdet i filen her:
[my_file.txt](my_file.txt)
## Oppgave e: frivillig
%% Cell type:markdown id: tags:
#### Hint
Lag en funksjon som tar inn antall like tall og like tilleggstall, og returnerer premien du har vunnet.
%% Cell type:markdown id: tags:
Her skal du skrive til fil og derfor benytte deg av
Eksempel på kjøring:
```python
f = open('my_file.txt', 'w')
>>>print(winnings(7,1))
2749455
>>>print(winnings(5,2))
95
>>>print(winnings(3,1))
0
```
%% Cell type:markdown id: tags:
## b)
%% Cell type:markdown id: tags:
Lag en funksjon `read_from_file(filename)` som tar inn strengen `filename` med filnavnet og skriver ut innholdet.
***Skriv koden i kodeblokken under***
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Du kan teste ut funksjonen ved å kalle den med `'my_file.txt'` som argument.
## Oppgave f: frivillig
%% Cell type:markdown id: tags:
#### Hint
Funksjonene skal settes sammen i main() slik at dette blir en fullverdig lottosimulator (for en lottorekke). Tallene du skal trekke ut (både lottotallene og tilleggstallene) kan legges i samme liste. Funksjonen `comp_list` kan da sammenligne de første 7 tallene, og så de siste 3 tallene, for å finne ut hvor mange like tall du har. main() skal returnere hvor mye du har tjent eller mest sannsynlig tapt på denne lottorekken. Dersom en lottorekke kosten 5 kroner, vil -5 returneres dersom winnings() er 0. Hvis du er heldig og winnings() blir 95 skal 90 returneres fra main().
%% Cell type:markdown id: tags:
**Husk at du kan bruke alle funksjoner du har definert over!**
Her skal du lese fra fil og må derfor benytte deg av
```python
f = open('my_file.txt', 'r')
```
***Skriv koden din i boksen under.***
%% Cell type:markdown id: tags:
%% Cell type:code id: tags:
## c)
``` python
```
%% Cell type:markdown id: tags:
Lag en funksjon `main()` hvor bruker får valget mellom å skrive til fil eller lese fra fil. Funksjonen skal kjøre så lenge brukeren ikke svarer `'done'`. (Se eksempelkjøring)
## Oppgave g: frivillig
Frivillig
- Hvis brukeren velger **write** skal du bruke **a)** til å skrive data til **my_file.txt**
- Hvis brukeren velger **read** skal du skrive ut innholdet (dersom det er noe) i **my_file.txt** vha. **b)**
%% Cell type:markdown id: tags:
**Eksempel på kjøring:**
```
Do you want to read or write? write
What do you want to write to file? hei allan
hei allan was written to file.
Do you want to read or write? read
hei allan
Do you want to read or write? done
You are done.
```
Finn ut hvor mye man har vunnet etter å ha tippet en million ganger. Anta at premiepotten er det samme hver uke, og at en lottorekke koster 5 kroner.
***Skriv koden din i kodeblokken under***
***Skriv koden din i boksen under.***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Du kan når som helst sjekke innholdet i [my_file.txt](my_file.txt)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment