NemProgrammering.dk logo

Betinget udtryk i Python

Lær Python programmering » Betinget udtryk i Python # 5
Inkluderet:
Livstidsadgang
27 videolektioner
7 timers undervisning
Stil spørgsmål
Kursusbevis

Information om denne video

Underviser: Simon Rotendahl   Video: 20:40   Lektion nr. 5 af 27

Hvordan tager jeg beslutninger?

I videoen her skal vi lære om betinget udtryk, et emne som for nogen er super nemt, men for de fleste kan det blive fustrende logisk. I vores daglige liv tager vi sjældent en tilfældig beslutning, du går ud af døren 10:15, da bussen kører 10:30, og du bor et kvarter væk, du drikker ikke en øl, da dit variable siger du har fået mere end rigligt osv. Det samme gælder programmering, vi vil tit gerne foretage os noget, baseret på noget. Et betinget udtryk, betyder at vi vil gøre noget, baseret på en betingelse.

Vi skal lære dette, da vi ellers aldrig kan håndtere flere muligheder, når GPS’en i bilen spørg sateliten, “hvor er jeg?”, så skal den kunne agere ud fra det svar.

Næste video bliver en opsamling, på ting vi har lært indtil nu, så i lige kan få øvet jer lidt.

Spørgsmål og kommentarer

Kun medlemmer med adgang til dette kursus kan stille spørgsmål og kommentere. Bliv medlem her!

  • per s. siger:

    Hej Simon
    Fandt løsningen på mit eget spørgsmål – man skulle bruge tab på print så det ikke stod helt ude til venstre på linien

    1. Simon R. siger:

      Hej Per,

      Det lyder godt :)

      Mvh.
      Simon

  • Rene M. siger:

    det jeg gerne vil kunne er, at taste et hvilket som helst tal ind ..int eller float …også skal betingelserne jo gerne passe ..
    Kan man det?? .. se længere nede i spørgsmål der har jeg lagt den stump kode op, jeg har lavet
    og hvorfor får jeg den fejl ..??

    i know mange spørgsmål ;o)

    1. Simon R. siger:

      Så fejlen var pga. At true skal være med stort. Floats virker stadig hvis du bruger int(ditValg) (er jeg ret sikker på, jeg har ikke lige min PC ved mig til at teste det). Når du bruger input bliver hvad end du skriver til en streng, men om du skriver int(“1”) eller int(“1.0”) bør det stadig virke, det vil dog ikke virke at skrive int (“1,0”) da Python er engelsk, og de bruger jo punktum istedet for komma i deres tal, så det kan være det der sker hvis du får fejl med kommatal.

  • Rene M. siger:

    PS C:\Users\rmlas\Desktop> python .\test.py
    Traceback (most recent call last):
    File “.\test.py”, line 2, in
    while(true):
    NameError: name ‘true’ is not defined
    PS C:\Users\rmlas\Desktop>

    1. Simon R. siger:

      Det er fordi det skal være med stort, altså True, hvis du skriver true tror python at det er et variable ligesom f.eks at ditvalg er et variable.

  • Rene M. siger:

    Hej Simon.
    Får en fejl der siger true ikke defineret, hvad menes der ??

    https://pastebin.com/Te11CQic

  • John E. siger:

    Hej Simon,
    Jeg har lidt svært ved at se formålet med elif.
    I spilopgaven går det tilsyneladende fint med at erstatte elif med if og jeg kan ikke rigtigt tænke mig til situationer hvor der er forskel på at anvende de to udtryk.
    Hvad er det jeg ikke fatter / overser ?
    mvh
    John

    1. Simon R. siger:

      Hej John,

      Du må undskylde det sene svar, jeg lå syg i går.
      Forskellen ligger i at når du bruger elif, så checker man kun indtil en betingelse er sand, resten bliver ikke checket, hvor hvis du bruger if på alle dine betingelser, så bliver alle checket. Jeg fandt et eksempel (se linket nederst) på det, som du kan prøve at kopiere og køre. I linket bruger jeg % operatoren (den hedder modulo) til at checke om et tal er lige eller ej. % (modulo) giver resten af en division så f.eks 11%2=1 og 10%2=0.

      Jeg håber det hjalp, ellers siger du bare til.

      Mvh.
      Simon

      https://pastebin.com/D4kW55en

  • Flemming S. siger:

    Hej Simon
    Findes der en xor funktion i Python, altså hvor enten x eller y er sandt men ikke begge?
    Hvis ikke kan man så foretage flere sammenligninger i samme if sætning f.eks. noget i retning af (x=2 and y != 4) or (x!=2 and y=4), hvilket vile svare til x=2 xor y=4 eller skal de deles op i flere sætninger?
    mvh
    Flemming

    1. Simon R. siger:

      Hej Flemming
      Det er der, det er operatoren ^, vær dog opmærksom på at dette faktisk er bitwise XOR, hvis du kun bruger den på boolske værdier (true og false), så behøves du ikke tænke videre over det end bare at bruge den. Du kan dog også bruge den til andet, f.eks heltal et eksempel på dette ville være 15 ^ 6 = 9, dette er fordi vi har følgende bitværdier 15 = 1111, 6 = 0110, så svaret af 1111 XOR 0110 vil være 1001, hvilket er lig 9.

      Mht. flere sammenligninger i samme if sætning. Ligesom vi har operatorer for normal matematik +,-,*,/ osv. så har vi operatorer for logik heriblandt er and, or, not (!=) osv. Så det er egentlig præcis det samme vi gør, i matematik har vi operatorer og tal, i logik har vi boolske værdier. Min pointe er at ligesom jeg kan lave udtrykket x+y*z, så kan jeg også lave x or y and z, en ting man dog skal være obs. på er præcedens (rækkefølgen udtrykket skal evalueres i) vi kan jo både have (x or y) and z eller x or (y and z), og det løser man med parenteser. Hvis du ender ud i lange udtryk, så kan du også gemme delvise svar i variabler, så at vi f.eks laver (a < b) and (y < q) om til e1 = (a < b), e2 = (y < q) og så have if e1 and e2:
      Sådan noget som at definere x til 2 skal dog gøres ude for dit udtryk.

      Det var meget på en gang, så du må endelig sige til hvis noget af det ikke giver mening, eller hvis du godt kunne tænke dig at jeg uddyber noget af det :)
      Mvh
      Simon

  • Jonas C. siger:

    Hej Simon.

    Tak for videoen.
    Jeg tænkte på to ting.
    Den ene fik jeg svar på mens jeg ville finde eksempler på det jeg ikke forstod.
    Så hvis andre tænker over det tager koden alt i rækkefølge og “elif” og finder ikke den der passer bedst, eller kommer nærmest.
    fx:
    x=3

    if x<2:
    print ("ramte if")
    elif x<5:
    print ("ramte elif1")

    elif x<4:
    print ("ramte elif2")

    Giver : ramte elif1

    Men det affødte så et andet spørgsmål, er det muligt at få koden til at undersøge videre og altså finde den løsning der kommer nærmest? Jeg gætter på at det er en hel anden funktion/kode end boolians.

    For det andet:
    Har elif(1) eller elif(0) en praktisk anvendelse, altså fx hvis else i dit eksempel kan tilgås af en anden vej. Eller er det en måde hvor man lukker en vej helt af, hvis jeg nu har en lang kode og på et tidspunkt vil have atom til at se bort fra en del af koden.
    Jeg håber det gav mening.
    Vh Jonas

    1. Simon R. siger:

      Hej Jonas,

      Tak for spørgsmålet.

      Ja det kan være lidt svært i starten, da der er mange ting man lige skal have i hovedet, på en gang. Mht. det med rækkefølge, hvis du lige vil være sikker på at din forståelse er rigtig så kan du evt. gense lidt af video 3, hvor jeg snakker om at Python er et fortolket sprog, bid mærke i at den oversætter/udføre koden linje for linje, eller video 2 omkring 11:20, hvor jeg får en fejl, men linjerne optil fejlen bliver stadig udført. Hvis vi tager koden i din kommentar som et eksempel, så vil den ramme elif1, elif2 passer måske “bedre”, men Python “ser” slet ikke elif2, da når den rammer eilf1, så er den færdig og springer resten over. Tænk på rundkørsel eksemplet, hvis du ser en afkørsel der går til den rigtige by, så tager du den afkørsel, selvom den næste afkørsel måske er kortere, fordi den næste afkørsel har du ikke set. Det virker til at du har forstået det rigtigt, men jeg ville lige udvide lidt på det for at være sikker på at der ikke er en misforståelse :)

      Mht. det andet spørgsmål omkring “den nærmeste/bedste løsning”, så bliver det lidt situations bestemt. F.eks så er x<4 ikke et bedre "svar" end x<5 når x = 3, begge udtryk er sande, og de blive ikke "mindre" sande fordi x bliver mindre, JEG forstår godt hvad du mener når du siger at x<4 er et bedre svar, men det gør computeren ikke. Hvis man kommer ud i sådan en situation, så er der ikke en generel løsning, det er situation til situation. Hernede under kommer der et eksempel, på en sådan situation, det giver nok først rigtig mening efter du har set video 8 og 9, men du får det lige så du har det til den tid.

      F.eks hvis du vil finde det mindste tal i en mængde af tal, lad os sige at mængden af tal hedder A
      Du kan se koden på linket her.
      https://pastebin.com/thKbF1Nb

      Du kan prøve at kopiere koden herover og køre den. De to print linjer er ikke nødvendige det er bare så du kan se hvad der sker, "for tal in A" lære du i video 9, og "A = …", samt "A[0]" lære du i video 8.

      Jeg håber det hjalp, det var dog en lang kommentar, så du må endelig sige til hvis der er noget i den som ikke lige giver mening :)

      Mvh.
      Simon

  • Henrik H. siger:

    Hvor er det dog dumt at smide noget ind i en opgave elif (1) når man ikke har lært det. Det betyder som underviser at du sikrer dig at dine elever sidder med en følelse af fiasko.
    Tak for lort

    1. Simon R. siger:

      Hej Henrik,

      Jeg må lige nød til at starte med at sige at jeg ikke syntes din tone er okay, jeg syntes ikke det er en særlig pæn måde at give kritik på.

      Mht. Til din kommentar. Ideen med elif (1), var faktisk lige netop at minde jer om noget i havde lært, og udvide jeres forståelse. Hvis du kigger i videoen omkring 1:10-1:20 så siger jeg nemlig at true er det samme som 1 og false er det samme som 0. Så meningen var at slå den forståelse bedre fast.

      Jeg kan godt se at det blev nævnt kort, men det syntes jeg ikke gør den tone i orden.