Information om denne video
Underviser: Simon Rotendahl Video: 17:24 Lektion nr. 6 af 27
Vi ser på hvad vi har lært
I videoen her, kigger vi lidt på hvad vi har lært. Vi skal lave et program, som vi kan spille Sten, Saks, Papir mod. Vi få her trænet betinget udtryk, variabler og tankegangen vi bruger når vi programmere. Vi ser også kort på to ting i ikke kender, det ene er ‘input()’ og det andet er ‘random’. Hvis i ikke helt forstår det efter videoen, så er det helt fint, da vi kommer til det senere.
Det er vigtigt at øve sig, og videoen her skal også ses som en opfordring, til at i prøver at lave små ting selv, da erfaring spiller en stor rolle i at være god til at programmere.
I næste video skal vi se på funktioner.
Hej Simon
Når jeg skiriver “elif ditvalg == saks:” melder den dette “Expected expression”
Hvordan fikser jeg det?
Hej Louise,
Det kan godt tyde på at det måske er et indrykningsproblem, ligesom Rene T’s spørgsmål herunder, selvom det giver en lidt anden fejl besked. Den som “Expected expression” betyder er “forventet udtrykt” men det er nok ligeså forvirrende, så jeg prøver lige at forklare beskeden.
Et “udtryk” i Python (og programmering generelt) er det term vi bruger for et stykke kode, så f.eks hvis vi havde koden
a = 1
så kan vi sige at vi har et udtryk som sætter variablet a lig med 1, vi kunne også have
print(1+3)
og her kunne vi sige at vi har et udtryk som ligger tallene 1 og 3 sammen, og skriver det ud i terminalen.
Så altså ordet udtryk bruger vi når vi gerne vil referer til et stykke kode. Dette er en ret forsimplet definition, men det er den fordi at hvis jeg skal give dig den præcise, så bliver det ret kompleks, et udtryk kan nemlig være valid eller ej, f.eks så ville udtrykket
a = [1,2
ikke være gyldigt, det vil give en fejl, da vi mangler en lukke parentes altså der skulle stå
a = [1,2]
. Disse regler kan man læse om i dokumentationen (https://docs.python.org/3/reference/expressions.html) men det er som sagt ret kompleks, og derfor er det ikke den bedste måde at lære det på efter min mening.Men okay det var ordet udtryk, det du skal tage med fra forklaringen før er at vi bruger ordet udtryk når vi taler om et stykke kode, hvis du ikke forstod resten, eller er lidt usikker på det, så er det helt fint. Fejlen siger så “Forventet udtryk” altså at den forventet der ville være et stykke kode, men det var der ikke. Vi har jo snakket “betinget udtryk” med de her if, elif, else, og strukturen på dem ser ud således
if (betingelse vi vil checke):
(udtryk der skal udføres hvis betingelse er sand)
så vi har en betingelse og hvis den er sand så udføre vi udtrykket som er indrykket nedenunder. Hvis vi i stedet kommer til at skrive
if (betingelse vi vil checke):
(udtryk der skal udføres hvis betingelse er sand)
jamen så får vi en fejl fordi at vi foventer at der kommer et udtryk efter vores if, men fordi det ikke er indrykket, så ved Python ikke at det høre til if’en.
Nå Louise det var en lang smøre og jeg håber det gav mening (og at det faktisk er det problem du har), hvis det ikke gav mening, eller at det ikke er det problem du har, vil du så ikke prøve at kopiere din kode og dele den med mig i en kommentar her, så kan jeg bedre se det :)
Nogen gange så bliver indrykninger ikke vist så god her i kommentarene, så jeg har også lavet et lille link her, hvor du kan se nogle if’er med indrykninger
https://smalldev.tools/share-bin/IzD6nkdF
Får en fejl ved elif == 2 : indentationerror unindent does not match outer indentation level
Hvorfor det
Hej Rene,
Jeg prøver lige at forklare fejlen, så du har en ide om hvad den siger. Indent betyder ‘indrykning’ altså det stykke ens linje kode er væk fra siden (se f.eks linje 11 i videoen der er sætningen indrykket et stykke. Så fejlen siger “indrykningsfejl ikke-indrykket matcher ikke det ydre indryknings niveau”, så på mere almindelig dansk Python tror at du har noget kode der ikke er indrykket rigtigt. Man kan indrykke på måder, man kan bruge TAB knappen, eller man kan gøre det med mellemrum, og hvis man kommer til at gøre begge dele kan Python godt blive forvirret. Det der tit kan ske er at man på en linje har trykket Enter, og så sætter programmet selv et TAB eller et mellemrum ind, og så gør man det selv et andet sted hvor man så bruger det modsatte.
Så det var en længere smøre, jeg håber det giver mening, og en forståelse for hvad der går galt.
Helt konkret for at løse det, så prøve at gå til linjen med elif, sæt textmarkøren (den blinkede streg som er der hvor du skal til at skrive) på indrykningen og så gå frem og tilbage på linjen med piltasterne, hvis der er et TAB så vil den rykke med enten 2 eller 4 mellemrum af gangen, hvis det er med mellemrum vil den kun rykke med 1 mellemrum. Prøv så at gøre det sammen på linjen med din if og se om der er en forskel.
Hvis det ikke giver mening det jeg skriver så bare sig til, og send gerne din kode med i kommentaren, så prøver jeg at kigge på det :)
Mvh.
Simon
Tusind tak :)
Hej SImon
Jeg fandt ud af det. Man skal åbenbart installere forskellige extensions for at få de forskellige features i Visual Studio Code. Jeg manglede et par stykker og nu virker det. smukt.
Nu har jeg et andet spørgsmål.
Når jeg kører programmet og svare på spørgsmålet Sten, Saks eller Papir?
Og jeg svarer – Sten
Hvad er det for en kommando du bruger bagefter for at få resultatet på mit valg? Er det Enter? For der sker ligesom ingenting når jeg gør det.
Hej Christina,
Dejligt at det lykkedes :)
Mht. det andet spørgsmål. Ja når jeg starter programmet så skriver jeg mit svar, og så trykker jeg enter, input funktionen “læser” så den linje (i dit tilfælde linjen ‘Sten’) fra terminalen.
Det næste jeg skriver her behøves man ikke vide, og det kan muligvis forvirre mere end det hjælper, men i tilfælde af at det hjælper så prøver jeg lige at forklare yderligere.
Input funktionen ved at den linje den “læser” er færdig når den støder på det der hedder EOL (End of line) og man indsætter EOL når man trykker enter. EOL er helt konkret når man skriver ‘\n’, det er også derfor at den skifter linje efter “Sten, Saks eller Papir?”.
Det er som sagt mere detalje end kurset her er ment til, så det er ikke vigtigt at forstå, men hvis det hjælper er det jo fedt, og du må endelig spørge mere ind til det hvis det ikke gav mening, men du gerne vil forstå det detaljen :)
Mvh.
Simon
Æv, chatten ændrer på min opsætning
jeg mener sådan her (prikkerne er mellemrum)
import random as rand
Sten = “Sten”
Saks = “Saks”
Papir = “Papir”
ditValg = input(“Sten, Saks eller Papir?\n”)
PCvalg = rand.randint(1,3)
if ditValg == Sten:
if PCvalg == 1:
….print(“I valgte begge sten, ingen vinder”)
elif PCvalg == 2:
….print(“Du vandt, sten vinder over saks”)
else
….print(“Du tabte, sten taber over papir”)
else
Ja chatten er ikke så god til at dele kode, men jeg forstod hvad du mente med … . Hvis det er så kan man også bruge hjemmesiden her https://pastebin.com/, til at dele små kode stykker, den holder nemlig formatteringen (indskub af linjer osv.)
Bare lige for at være sikker på jeg forstår, du mener det der sker fra 4:50-6:15 ca. altså f.eks når jeg skriver if ditValg == Sten: og når jeg så trykker enter så går den automatisk et indskub (et tab kalder man det) ind, eller når jeg har skrevet print(“I valgte begge sten, ingen vinder”) og trykker enter så går den automatisk ned på næste linje, med samme indryk som på linjen ovenfor. Det burde også ske for dig, men det som ikke vil virke er hvis man kopiere kode ind, så hvis jeg f.eks kopiere linjerne
if PCvalg == 1:
print(“I valgte begge sten, ingen vinder”)
så vil den ikke lave et indryk ved print. Det der sker fra 4:50-6:15 (og i andre tidspunkter men bare lige så vi har et eksempel at gå ud fra) er at når man skriver et : i slutningen af nogle specifikke sætninger (f.eks en sætning der starter med if, elif, else og nogle flere) så ved VS Code at det næste der kommer skal indrykkes, men den checker ikke hele filen og laver indrykninger, den gør det kun mens man skriver. Så hvis du f.eks laver en ny linje efter import random as rand, og skriver if true: og trykker enter går den så et indryk/tab ind?
ja jeg har gemt den
det jeg mener er at linjerne ikke går ind, som dine
f.eks
import random as rand
Sten = “Sten”
Saks = “Saks”
Papir = “Papir”
ditValg = input(“Sten, Saks eller Papir?\n”)
PCvalg = rand.randint(1,3)
if ditValg == Sten:
if PCvalg == 1:
print(“I valgte begge sten, ingen vinder”)
elif PCvalg == 2:
print(“Du vandt, sten vinder over saks”)
else
print(“Du tabte, sten taber over papir”)
else
Jeg spekulerede på som jeg mangler nogle extensions. Det virker som at man skal installere lidt forskellige inden man kan begynde. Har lige installeret om
Den har aldrig gjort det. Jeg lægger først mærke til det nu fordi det er en længere kode
Hej igen
Det er allerede når jeg begynder at skrive den kode f.eks, som du præcis har vist, Nu er den ikk fuldstændig, men burde programmet ikke skrive det pænt fra starten? Det gør din
import random as rand
Sten = “Sten”
Saks = “Saks”
Papir = “Papir”
ditValg = input(“Sten, Saks eller Papir?\n”)
PCvalg = rand.randint(1,3)
if ditValg == Sten:
if PCvalg == 1:
print(“I valgte begge sten, ingen vinder”)
elif PCvalg == 2:
print(“Du vandt, sten vinder over saks”)
else
print(“Du tabte, sten taber over papir”)
else
Har du gemt filen og givet den et navn, som for eksempel spil.py? Og når du siger det ikke er pænt mener du så at den ikke får farver? Den ved først hvordan den skal farvelægge når man har navngivet filen, da den så ved at den skal farvelægge det som Python kode.
Hej Simon
Når du koder går dine linjer ind og det gør det mere overskueligt. Mine gør ikke det. Har du nogen ide hvorfor? Jeg har prøvet at google uden løsning
Hej
Ja det bør den selv gøre, det er oftest fordi at der er en fejl i koden et sted og derfor kan den ikke finde ud af at omskrive det til noget mere overskueligt. Vil du prøve at copy paste din kode her i kommentaren, så kan jeg lige prøve at se om jeg kan finde ud af hvorfor :)
Mvh.
Simon
Hej Simon,
Jeg har installeret version 3.10. når jeg prøver at kører de simple linjer fra min windows maskine. får jeg følgerne fejl.
Hvad skyldes dette??
PS C:\Users\——-\OneDrive\Dokumenter\Python Kursus> python3
python3 : The term ‘python3’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ python3
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (python3:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Hej Michael,
Når du er på windows skal du bare skrive python (hver gang) og aldrig python3. Grunden til jeg gør det er at på Mac (og Linux) der er python 2 også installeret, så for at computeren ved om du vil bruge python 2 eller python 3, så skal man skrive det. Hvis man på Mac (og Linux) bare skriver python, så er det python 2 som standard.
Så prøv bare med python, og det burde virke :)
Mvh.
Simon
Hej Simon
Ha være igang med lektion.6 (StenSaksPapir) får denne melding når jeg skriver “pyton3”
Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Ali
ases.
Det køre fint med komandoen “Python” men ville gerne vide om jeg kan se hvil versin jeg har instaleret på min WindusPC. og om jeg evt. kunne opdatere denne ?
Vh Thomas
Hej Thomas
Det er også lidt forvirrende. Problemet er at Mac har Python 2 installeret som standard, så når man på Mac (eller Linux som jeg har i videoen her) har installeret Python 3, så skal man skrive python3 og ikke bare python når man vil køre et program eller bruger den Python 2. Windows hare ikke noget Python installeret som standard, så når du har installeret Python 3 så er det Python 3 du bruger når du skriver python. Hvis du vil checke din Python version så skriver du
python -V
i terminalen.
Mvh.
Simon
Ok …. så forstår jeg… var lige inde og tjekke og kunne se at jeg haved V3.9 👍
Tak for svar…Vh Thomas
Hej Simon,
Jeg har prøvet at arbejde lidt videre med spillet, og har inkluderet point og runder, Men af en eller anden grund, regner Python runderne anderledes end mig. :-)
F.eks. Jeg spørger i starten efter hvor mange runder vi skal spille, hvorefter jeg så beder Python om at regne ud, hvor mange hænder der skal til, førend man har vundet/tabt spillet (f.eks. bedst af 5 betyder 3 rigtige er nok til at vinde)
Men, jeg kan se at det vist ikke er helt det jeg laver..f.eks, kræver den 4 vundne for at afslutte et “bedst af 5” spil..
Koden er her:
https://pastebin.com/RuihJB5Y
Jeg tænker også, at der må være en mindre kluntet måde at gøre det på, end min valgte…?
Hej Bo,
Undskyld det lidt sene svar, jeg har lige siddet med eksamen.
Problemet kommer ved at du have runde <= runder1, runde starter på 0. Så skal du også huske at skrive += og ikke =+ :)
Jeg har rettet i det, og cuttet runder1 ud, da det ikke er nødvendigt, jeg har også kommenteret de ændringer jeg har lavet. Håber det hjælper ellers må du sige til :)
https://pastebin.com/gEcMV93h
Mvh.
Simon
Super, tak for det. Det giver god mening :-)
Bo
Hej
Super videoer (godt man kan gå tilbage :-) )
Kan der være problemer med copy/paste i Atom ?
jeg er 99,9 % sikker på at have skrevet helt korrekt, og alligevel springer den til nederste print linie, når jeg vælger sten.
løst ;-)
Hej Kim,
Tak for de pæne ord :)
Ja nogen gange slår det lige pludselig en hvad der er galt, det kender jeg kun alt for godt, men ellers så spørg du selvfølgelig bare :)
Mvh.
Simon
har lige et spørgsmål, kommer dine gåseøjne aut ?
Hej Kim
De kommer ikke automatiske, men det kommer to af dem når jeg trykker en gang.
Altså når jeg trykker shift+2 så kommer der “” frem og ikke kun ” som der normalt ville :)
Mvh.
Simon
hej Simon rand vikker ikke. Ved ikke hvorfor den ikke bliver rød. Her er hvad jeg har lavet
import random as rand
Sten = “Sten”
Saks = “Saks”
Papir = “Papir”
ditVald = input (“Sten, Saks eller Papir?\n”)
PCvalg = rand.randint(1,3)
if ditVald == Sten:
if PCvald == 1:
print (“I valgte begge sten”)
elif PCvalg == 2:
print (“Du vandt sten vinder over saks”)
elif PCvalg == 3:
print (“Du tabte sten taber over papir”)
else:
print (“det er med stor bogstav”)
Hej Jakob,
Det kun ligne en tastefejl her
if PCvald == 1:
Som skal være
if PCvalg == 1:
Hvis det ikke virker må du sige til, og gerne inkludere hvilken fejl besked du får i terminalen :)
Mvh.
Simon
Hej Simon, tak for nogle gode videoer indtil videre. Hvor selv en nybegynder med stort N kan følge med :)
Jeg kan desværre ikke få programmet til at køre.
Får disse to fejl: Traceback (most recent call last): og TypeError: ‘str’ object is not callable
– Ved ikke om det har nogen betydning, men skriver i anaconda –> Spyder (Python 3.7). Da jeg ved, det er dette, jeg skal bruge senere på mit studie.
Vh. Camilla
Hej Camilla,
Tak for de pæne ord :)
Mht. Fejlen, som en lille sidenote så er det faktisk kun en fejl du får, stykket
“Traceback (most recent call last):”
Skal du ikke tage sig synderligt af, det er en for lang forklaring til en kommentar her, men det betyder kort sagt “jeg har læst programmet igen, og her er fejlen….”
Den egentlige fejl er nr. 2 du nævner. Den siger så at det er en type fejl og at typen str (hvilket er kort for streng/string på engelsk) ikke kan “kaldes” (callable). Så det der sker er at et sted i din kode bruger du en streng (altså noget som “dette er en streng da det er i gåseøjne”) som en funktion.
Det er generelt hvad fejlen siger, hvis jeg lige kan få dig til at kopiere din kode og dele den med mig i en kommentar her på siden, så kan jeg bedre lige udpege specifikt hvad det er :) du må rigtig gerne dele den via linket her i bunden, grunden til det er at indrykninger i koden bliver slettet hvis du bare kopiere det direkte ind her på siden :)
https://pastebin.com/
Mvh.
Simon
Super, du får min kodning her:
import random as rand
Sten=”Sten”
Saks=”Saks”
Papir=”Papir”
ditValg = input(“Sten, Saks eller Papir?\n”)
PCvalg = rand.randint(1,3)
if ditValg==Sten:
if PCvalg==1:
print(“uafgjort”)
elif PCvalg==2:
print(“YES du vandt”)
else:
print(“øvbøv du tabte, prøv igen”)
elif ditValg==Saks:
if PCvalg==1:
print(“øvbøv du tabte, prøv igen”)
elif PCvalg==2:
print(“uafgjort”)
else:
print(“YES du vandt”)
elif ditValg==Papir:
if PCvalg==1:
print(“YES du vandt”)
elif PCvalg==2:
print(“øvbøv du tabte, prøv igen”)
else:
print(“uafgjort”)
Har også delt det via linket, men er ikke sikker på om jeg har gjort det korrekt :)
Hmm jeg har kigget på det, men jeg kan ikke lige finde fejlen, ved mig kører programmet som det skal, kommer fejlen kun når du skriver noget bestemt eller hvornår kommer problemet?
Jeg har lige delt koden på pastebin, og givet det med, så kan du lige se om du har de samme indryk. Når man deler på pastebin så skal man kopiere adressen på siden, efter man har trykker “create new paste” og så deler man det på den måde :) https://pastebin.com/es0wu8Vq
Det kommer så snart jeg kører programmet, før jeg har givet et input.
Har umiddelbart skrevet det samme som dig.
https://pastebin.com/TPepXCGy
Du kan også lige få hele meldingen i konsollen/terminalen, ved ikke om det er til nogen hjælp :)
Traceback (most recent call last):
File “”, line 1, in
runfile(‘C:/Users/Camilla/Documents/2. sem/Python/Øvelse1.py’, wdir=’C:/Users/Camilla/Documents/2. sem/Python’)
File “C:\Users\Camilla\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 827, in runfile
execfile(filename, namespace)
File “C:\Users\Camilla\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 110, in execfile
exec(compile(f.read(), filename, ‘exec’), namespace)
File “C:/Users/Camilla/Documents/2. sem/Python/Øvelse1.py”, line 58, in
ditValg = input(“Sten, Saks eller Papir?\n”)
TypeError: ‘str’ object is not callable
Hmm det virker til at være et problem med det Spyder der, jeg har selv brugt Anaconda, men med det der hedder Jupyter ikke Spyder, så jeg ved ikke helt hvad der går galt, det ligner det er input funktionen som den er sur over. Du kan prøve at skrive
ditValg = “Sten”
i stedet for
ditValg = input(“Sten, Saks eller Papir?\n”)
hvis det så stadig er et problem, så er det input funktionen. Jeg kender desværre ikke Spyder godt nok til at jeg rigtig kan hjælpe, men du kan prøve at køre koden på linket herunder, så du kan prøve det :)
https://repl.it/repls/RaggedDelectableCamel
Hej
Først og fremmest, god undervisning. Ift. opsamlingsvidoen med sten, saks og papir har jeg forsøgt at lade programmet tillade, at man skriver sten, saks og papir med lille begyndelsesbogstav. Jeg lykkes ikke med det, måske kan du give et hint?
Jeg har ikke lyst til, at det skal kunne ses om en mulighed, dvs. det skal ikke være en del af ditValg = input(“Sten, Saks…..”), men blot at programmet skal kunne tillade de tre valgmuligheder med lille begyndelsesbogstav.
Vh
Thomas
Hej Thomas,
Tak for de pæne ord.
Som et hint kan du få at du også har ‘or’, altså at når du i en ‘if’ checker om noget er sandt, så kan du checke flere ting på samme tid, dvs. Jeg kan f.eks checke om et tal (lad os kalde det T) enten er under 3 eller over 5 ved at skrive
If T > 5 or T < 3:
Det her er så for tal, men sammen logik glæder for strings.
Jeg håber det hjalp ellers siger du bare til :)
Du kunne gøre det simplere ved at spare linjerne Sten = “Sten”
import random as rand
ditvalg = input(“Sten, Saks, Papir\n”)
pcvalg = rand.randint(1,3)
if ditvalg == “Sten”:
if pcvalg == 1:
print(“Uafgjort, begge valgte sten”)
elif pcvalg == 2:
print(“Du vinder over Saks”)
else:
print(“Du taber til Papir”)
elif ditvalg == “Saks”:
if pcvalg == 1:
print(“Du taber til en Sten”)
elif pcvalg == 2:
print(“Uafgjort, i valgte begge Saks”)
else:
print(“Du vinder over Papir”)
elif ditvalg == “Papir”:
if pcvalg == 1:
print(“Du vinder over Papir”)
elif pcvalg == 2:
print(“Du taber til en Saks”)
else:
print(“I har begge valgt Papir”)
Hej Gert,
Du må undskylde det sene svar, jeg har haft problemer med min mail, så jeg har ikke fået besked om kommentare.
Det har du ret i, grunden til jeg gør det er nok mest rutine, så hvis man f.eks ville ændre “Sten” til “sten” så var det samlet et sted, men det er der ikke den store grund til i programmet her da det er så kort :)
Hej, jeg kunne godt tænke mig at vide, om man kan lave en taste-combo, så man kan udkommentere flere linjer på en gang i Atom?
Mvh
Dennis Jakobsen
Hej Dennis,
Den findes faktisk allerede, hvis du trykker på Edit oppe i toppen, så vil du se toggle comment og hvilken genvej det er. Jeg mener genvejen er Ctrl+/, men da du nok bruger Dansk tastatur skal du trykke Ctrl+shift+7, da / jo er shift+7 på dansk tastatur :)
Mange tak for hurtig svar, og i øvrigt et fedt online kursus.
Mvh
Dennis J
den giver mig denne fejl ….
File “.\dice.py”, line 9, in
ditvalg = input(int(“et”),int(“to”), int(“tre”), int(“fire”), int(“fem”), int(“6”))
ValueError: invalid literal for int() with base 10: ‘et’
Det her er rigtig fint
if int(ditvalg) == 1:
Men du skal ikke have int foran herinde
ditvalg = input(int(“et”),int(“to”), int(“tre”), int(“fire”), int(“fem”), int(“6”))
Den tekst du skriver inde i input(“tekst”) skal være en streng, da den skal printes i terminalen, og derfor vil vi ikke lave det til int.
Jeg havde også lige overset noget af det du prøvede tror jeg. Den løsning jeg kom med virker kun hvis du taster tal ind som svar i terminalen, altså det virker hvis du skriver 1 men ikke hvis du skriver et, da int(“et”) ikke giver 1. Lige nu har du ikke helt forudsætningerne for at lave løsningen hvor du skriver et, men det har du efter næste video (ikke at det er nemt efter den video, det er stadig svært at lave løsningen, men du har værktøjerne efter den video), og efter videoen om dictionaries kan du lave en ret sej løsning. Når jeg lige kommer hen til en PC så kan jeg lige lave en løsning som bruger funktioner, og en som bruger dictionaries. Så kan du lige få en bedre idé om fremgangsmåden :)
glæder mig som et lille barn ;o)
Hej Rene,
Her er de tre måder at løse det på, jeg har kommenteret det lidt, men jeg har med vilje ikke skrevet for meget, så tænker jeg at du måske selv kan sidde og kigge lidt på det, men hvis det ikke giver mening må du sige til :)
Din løsning – https://pastebin.com/KYC6ScC9
Løsning med funktion – https://pastebin.com/ZXpUqSYe
Løsning med dictionary – https://pastebin.com/z3jwSeP0
Håber det hjælper.
på function løsningen , skal man skrive tallet ind som bogstaver i terminalen og det bliver returneret tilbage som tallet man skrev,
og spillet , printer forkert input og slutter af sig selv hvis man ikke skriver tal fra 1 til 6.
Da det vil returnere -1
er det korrekt forstået ??
Det er helt korrekt :)
det her kører osse
https://pastebin.com/AxkmVLnP
er det sådan her du tænker ??
import random as rand
print(“Dette er et terning spil der gælder om, at slå højest”)
while(True):
ditvalg = input(int(“et”),int(“to”), int(“tre”), int(“fire”), int(“fem”), int(“6”))
pcvalg = rand.randint(1,6)
if ditvalg == “stop”:
break
if int(ditvalg) == 1:
if pcvalg == 1:
import random as rand
1=”et”
2=”to”
3=”tre”
4=”fire”
5=”fem”
6=”seks”
print(“Dette er et terning spil der gælder om, at slå højest”)
while(True):
ditvalg = input(“et, to, tre, fire, fem, seks”)
pcvalg = rand.randint(1,6)
if ditvalg == “stop”:
break
if ditvalg == 1:
if pcvalg == 1:
print(“I fik begge 1, derfor uafgjort” + “\n”)
elif pcvalg == 2:
print(“Du tabte!!, pc fik 2,” + “\n”)
elif pcvalg == 3:
print(“Du tabte!!, pc fik 3,” + “\n”)
elif pcvalg == 4:
Det er fordi når du bruger input så får du svaret, som brugeren skriver, som en streng, men det du sammenligner med er et heltal (integer), så hvis du f.eks skriver 1 som bruger, så bliver ditValg til “1”, så din if ditValg == 1 bliver til if “1” == 1, og det giver false.
Du kan fikse det ved at skrive int foran, det laver nemlig en streng til er heltal, så f.eks int(“1”) giver 1, du kan også gøre det fra heltal til streng ved at skrive str(1) som giver “1”.
Så de steder hvor du sammenligner ditValg med et tal, skal du ændre til int(ditValg) == 1 f.eks.
Jeg håber det hjalp ellers må du lige sige til :)
tak for hurtig svar ;o)
Hej Simon.
jeg prøver at lave spillet om til terning spil hvor der skal slåes højest for, at vinde.
Hvordan kan jeg få den til at godtage heltal som valg
bruger stadig
Ditvalg=input(1, 2, 3, 4, 5, 6)
men den dutter squ ikke … ;o(
Udmærket video
Jeg støder dog på to udfordringer.
Hvis jeg skriver python3 i terminalen får jeg en fejl.
Jeg er på en pc
python3 : The term ‘python3’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was inclu
ded, verify that the path is correct and try again.
At line:1 char:1
+ python3 .\Sten.py
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (python3:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Men det virker fint med bare af skrive python navn.py
Noget andet der gavn lidt udfordringer var indryk af de boolske udtryk. F.eks det sidste else skal stå helt til højre så virker det. Hvis det bliver rykket ind under det sidste else med TAP så virker det ikke.
Jeg valgte også at smide en linje ind i koden så jeg kunne se computerens valg
if ditValg == Sten:
if PCvalg ==1:
print(“Computeren vælger Sten”)
print(“Uafgjort”)
elif PCvalg ==2:
print(“Computeren vælger Saks”)
print(“Du vandt, sten vinder over saks”)
#Her under kan der godt bruges else fordi der kun er 3 muligheder og du har tjekket op imod de to så kan det kun være den 3.
else:
print(“Computerne vælger Papir”)
print(“Du tabte, Parir vinder over Sten”)
Hej Henrik,
Tak for de pæne ord.
Mht. python3 så har jeg ikke været god nok til at få det forklaret.
Så den korte forklaring. På PC har det ingen betydning mht. til kurset her, du skriver bare python det er kun Mac og Linux som skal skrive python3.
Den længere forklaring. Grunden til at jeg skriver python3, er at min computer bruger styresystemet Ubuntu (en version af Linux). Linux og Mac computere har allerede python2 installeret da styresystemet bruger python2, så jeg har både python2 og python3 installeret, derfor er jeg (og Mac brugere) nød til at specificere om vi gerne vil bruge python2 eller python3, når jeg skriver python så bruger den python2 som standard. Så da du installerede Python på din PC fik du python3, og derfor er det standard. Grunden til at python3 er vigtigt i videoen her er at input funktionen er forskellig i python2 og python3, men langt det meste af tiden gør det ikke nogen forskel hvilken en man bruger.
Mht. else problemet. Kommentarfeltet her viser ikke indryk så jeg har lidt svært ved helt at forstå hvad du mener. Jeg vil lige prøve at forklare if-else på en lidt anden måde og se om det hjælper. På dansk f.eks vil det ikke give mening bare at sige “ellers gør det her”, man vil altid sige “hvis noget, så gør det ene, ellers så gør det andet”, derfor vil en else altid “tilhøre” en if. Elif står for “else if” altså “hvis ellers”, så det svare til “hvis x gør ting 1, ellers hvis y gør ting 2, ellers så gør ting 3”, på den måde høre en elif også til en if. Så i sten, saks, papir eksemplet så høre elif PCvalg == 2 og else, til if PCvalg == 1. Hvis der i mod else står på samme indrykning som if ditValg == Sten, jamen så tilhøre else if’en ditValg == Sten. Jeg kan forestille mig at den lille smøre her er lidt forvirrende, så jeg har prøvet at lave et eksempel med din koden, som ligger på linket herunder (på linket kan man se indrykningen)
https://pastebin.com/7gvGLgGi
For at gøre her med “tilhørsforhold/”/indryk mere tydeligt, så kan Atom faktisk vise det, du kan se på billedet herunder på linket hvordan der går nogle linjer ned. Du kan slå dem til, i Atom, ved at trykke Edit -> Preferences -> Editor -> sæt flueben ved “Show Indent Guide”. Du behøves ikke trykke gem eller noget, ændringen sker så snart du sætter flueben.
https://ibb.co/KVPgnm6
Hvis det her ikke svarede på dit spørgsmål (jeg kunne ikke helt gennemskue problemet, så jeg har måske svaret på noget helt forkert) så må du endelig lige skrive igen! Og evt. bruge pastebin.com til at dele din kode med mig, så jeg kan se indrykkende. Håber det hjalp lidt :)
Mvh.
Simon
Hmm okay jeg opdager så nu, at du ikke kan se alle de indryk der er lavet i forbindelse med de forskellige if, elif og else – sætninger. :-(
Hej Simon
Jeg sidder og udfordrer mig selv og er ved at lave en godnathistorie til børnene, hvor de kan være med til at bestemme indholdet. Et slags adventure-spil-
Men jeg er lidt udfordret i min kode, fordi mine if, elif og else kollidere med hinanden. Det gør de jo nok fordi jeg skriver dem i samme række eller hvad man siger. (Det er den del af koden jeg har lavet til en kommentar). Men jeg kan ikke rigtigt se, hvordan historien ellers skulle få alle de her grene, med mindre det er noget helt andet der skal til som ikke er lært endnu?
Det næste spørgsmål er: Hvordan kan jeg lade computeren gå tilbage til en linje den een gang har været ved. f.eks hvis jeg ønsker at historien skal gå tilbage til et tidligere tidspunkt ved et forkert valg?
(Koden står her nedenfor)
print (“Historien om Tommy \n”)
navn = input(“Hej hvad hedder du? “)
print (“Jamen hej ” + navn + ” Jeg vil nu fortælle dig en sød lille historie, som du kan være en del af :-) \n”)
print (“Der var engang en dreng, som hed Tommy.”)
print (“Tommy var 8 år gammel og var en helt almindelig dreng ligesom alle andre.”)
print (“Eller der var een mindre forskel og det var at, hvis han trykkede på sin navle,”)
print (“så blev han helt lille. Helt lille som en lille mus. \n\n”)
print (“Nå men Tommy sad en dag og legede på sit værelse. Han legede med sin røde ynglingslegetøjsbil”)
print (“Med sin ene hånd skubbede han bilen frem og tilbage på værelset, mens han sagde: – Wrroooomm -“)
print (“På et tidspunkt skubbede Tommy bilen lidt for hårdt så den rullede og rullede, indtil den forsvandt, ind i et lille bitte hul, som var i væggen under skrivebordet.”)
hullet = input (“Hvad skal Tommy gøre? Forsøge at få bilen ud (1), eller lege med noget andet (2)\n”)
if hullet == “1”:
print (“\nTommy havde aldrig lagt mærke til det hul i væggen. Han kravlede hurtigt efter bilen og forsøgte at se ind i hullet.”)
print (“Der var mørkt derinde, og han kunne slet ikke få øje på bilen.\n”)
mørkt = input (“Hvad skal Tommy gøre? finde en lommelygte (1) eller trykke på sin navle (2) “)
if mørkt == “1”:
print (“\n Tommy rejste sig op og gik hen til en kasse som han gennemrodede, indtil han fandt en lille lommelygte.”)
print(“Han kravlede igen ned til hullet og lyste ind i det med lommelygten. DER var den. Den røde bil. Langt inde i hullet.”)
print (“Tommy forsøgte at bruge sine hænder til at få bilen ud, men han kunne slet ikke nå bilen. ÆV. Han tænkte sig om. \n”)
problem = input(“Hvad skal Tommy gøre? Skal han bruge en støvsuger (1), eller skal han trykke på navlen (2), eller skal han bruge et kosteskaft (3)”)
if problem == “1”:
print (“Tommy gik ind i stuen og spurgte sin mor om han måtte låne støvsugeren, fordi han bare lige ville støvsuge værelset.”)
print (“Moderen synes det var virkelig mystisk, fordi Tommy var altså ikke typen, der plejede at støvsuge værelset, men hun lod ham låne støvsugeren alligevel.”)
print (“Tommy bar støvsugeren ind på værelset, sluttede stikket til, tændte støvsugeren og stak støvsugerøret hen til hullet i væggen.\n”)
print (“- KLONK! – hørte han pludselig. YES det må være bilen, tænkte Tommy. Men det var det ikke, da han forbavset kikkede på støvsugerøret.”)
print (“For enden af støvsugerøret sad nemlig en mus. Den så ret gal ud, fordi den faktede helt vilt med arme og ben. Tommy skyndte sig at slukke for støvsugeren. \n”)
elif mørkt == “2”:
print (“Tommy trykkede på sin navle. Og pludselig med eet begyndte han at skrumpe og skrumpe. Det tog ikke lang tid og så var han ikke større end en mus.”)
elif hullet == “2”:
print (“\nTommy blev lidt ærgerlig over at se den røde ynglingsbil trille ind under skrivebordet, men så kom han til at se ynglingsspidermanden, der stod oven på en af hylderne.”)
print (“På samme tid kom han i tanker om den spraglede hoppebold, som var oppe på loftet. \n”)
legetøj = input(“Hvad synes du Tommy skulle? Tage spidermanden ned (1), eller finde hoppebolden på loftet? (2)”)
#if legetøj == “1”:
#print (“Tommy tog sin spidermand ned.”)
#elif legetøj == “2”:
#print (“Tommy gik op på loftet.”)
#else:
#print (“Du skulle skrive 1 eller 2. historien skal genstartes.)
else:
print (“Du skulle skrive 1 eller 2. Historien skal genstartes.”)
Hej Nicky
Super fedt projekt du er gået i gang med! Jeg har jo undervist børn og unge meget, og jeg er også en del af DR’s projekt Ultra:bit, så jeg håber det kan bringe interessen videre til børnene :)
Mht. dine if, elif, else statement. Jeg tror måske der mangler et indryk ved legetøjs delen. Du kan se koden på linket nederst. I koden har jeg også tilføjet en lille ting, på linje et skriver jeg “import time” og senere bruger jeg “time.sleep(5)” som går at programmet “står stille” i 5 sekunder, jeg tænker du kan bruge den til at vise teksten lidt langsommere (det med import kommer i video 18, du behøves ikke se den nu, bare brug det, så lærer du om det senere).
Mht. at vende tilbage til en linje, så skal du bruge en while løkke (video 9), og du vil kunne gøre din kode markant mere overskuelig med funktioner (video 7). Så prøv videre med det, og se et par videoer mere. Når d har set de to videoer så er løsningen ikke helt triviel (åbenlys), så skriv endelig igen der, hvis du syntes det er svært at gennemskue.
Jeg håber det hjalp lidt, ellers så skriver du bare igen, og skide godt projekt, super godt fundet på :)
Link til koden: https://pastebin.com/gk6FqpeL
Hej Simon,
Tak for din fine feed-back.
Jeg har rettet koden lidt til og inddraget noget af dine inputs. Og så har jeg lavet noget “for sjov grafik”.
Du kan se koden her: https://pastebin.com/CHhdv4vG
Jeg er så småt ved at se styrken i Python (synes jeg). Men der er meget som også er svært.
Indtil videre sidder jeg fast i emnet “funktioner” som jeg synes er vildt svært at begribe. Jeg kan godt forstå styrken i det, men kan simpelthen ikke greje, hvordan jeg skulle omsætte det til praksis.
I min kode har jeg sat de der time.sleep ind. Så er det at jeg tænkte at jeg måske kunne gøre at man startede med at indætte sin alder, hvorefter time.sleep variere hele vejen ned, alt efter om man er god til at læse eller ej.
Jeg tænkte at jeg skulle bruge time-sleep i en funktion – har jeg ikke ret?
Nå men der er vel ikke andet for end at kæmpe videre, selvom jeg ville ønske jeg havde mere tid til det :-)
Ultra:bit? Fedt. Jeg står faktisk nu og tænker at min ældste datter på 6 år snart skal i gang med at programmere lidt :-) Har du nogle anbefalinger?
Mvh
Nicky
Hej Nicky,
Fedt du kører videre, jeg kender kun alt for godt, det med at finde tid til sådanne ting, det er ikke altid lige nemt.
Jeg kan ikke lige se noget på linket, jeg tror der er gået noget galt med det desværre.
Mht. funktioner. Det er oplagt at lave noget til en funktion, hvis du gør en ting ofte, så f.eks det med alder, ville jeg ikke lave til en funktion, for det er kun noget du skal gøre en gang. Du kan lave det til en funktion, men der er ikke så meget mening i det. Derimod vil det give rigtig meget mening at lave det med at tage et valg, til en funktion.
Jeg har lavet et eksempel på de to ting i linket her i bunden, som du kan bruge, med nogle kommentare i, som skulle forklare hvad jeg gør :)
Mht. din datter. Super fedt at du vil opmuntre hende til at kode! Jeg har et par forslag.
1. Scratch. Scratch bruges efterhånden meget i skolen, og det er en super god måde at lære lidt om programmering, især for børn (men er faktisk også lærerigt for voksne). Min storebror er faktisk ved at lave et kursus her til siden, i netop det (link i bunden). Indtil da, så har jeg og ham lavet en “programmerings julekalender” for alinea, også i Scratch, så der er lidt at gå i gang med.
2. Hvis man gerne vil have noget mere fysisk at se sin kode på, så kan du søge lidt på BBC Micro:bit. Det er en “microcontroller”, som er god til at lære at programmere med, og det er det som DR’s Ultra:bit projekt går ud på (link i bunden).
Skriv endelig igen, hvis du vil have mere info om noget af det :)
Kode til dit spil: https://pastebin.com/iSkYMEuS
Scratch på nemprogrammering: https://www.nemprogrammering.dk/wp/programmering-for-boern/
Julekalender: https://lærkode.alinea.dk/julekalender/
Ultra:bit: https://www.dr.dk/skole/ultrabit
(Jeg har ikke lige haft stavekontrol på, så der er nok en del fejl, det må du undskylde :p )