Information om denne video
Underviser: Simon Rotendahl Video: 19:52 Lektion nr. 27 af 27
Hvad gør jeg, hvis jeg måske, får en fejl?
Når du programmere vil der komme tidspunkter, hvor du ved der kan komme fejl. F.eks hvis du skal bruge en fil, så kan du komme til at indtaste et forkert fil navn. I sådanne tilfælde vil vi gerne kunne håndtere det mere elegant. Vi vil derfor gerne have en metode hvorpå vi kan agere på en bestemt måde, hvis en bestemt fejl sker, og det er det videoen her går ud på. Det er godt at kunne håndtere fejl elegant, da du så kan give din kode ud til andre, der ikke forstår den, du kan nemlig lave unikke fejlbeskeder. Det her er sidste video, og jeg håber i nyder den.
Selvom det er den sidste, så er den rigtig vigtig. Tak for den her gang!
Hent dit kursusbevis
Du har nu været igennem en lang række videoer, og du har forhåbentlig lært en hel masse om Python, som du kan bruge i skolen, i den hverdag eller på dit arbejde. Nedenfor kan du hente et kursusbevis, som du f.eks. kan vedlægge dit CV, når du søger job.
Kursusbeviset kan kun hentes, hvis du har købt og gennemført vores Python kursus. Læs mere her
Hej Simon
Ja, det er et rigtigt godt fundament at bygge videre på.
Mvh.
Lisbeth
Hej Simon
Tak for et rigtigt godt kursus.
Mvh.
Lisbeth
Hej Lisbeth,
Tak for de pæne ord, jeg håber det kan bruges :)
Mvh.
Simon
Hej Simon
Jeg har nu udreddet min spaghettikode til noget mere profesionell kode med klasse.
https://transfer.pcloud.com/download.html?code=5Zq3bF0ZnXLH68oiPOSZfDC3ZpaTC0QD4uV54BC8mPk19Uz3ueABX
Det her er et link til py filerne s[ du selv kan lave en Unix version.
Jeg er færdig med projektet nu og kan ikke finde på mere, men nu er jeg også nået til version 7.0
Det lyder godt, jeg ville også selv have forslået at lave det objekt (klasse) baseret da det lød som en god case at gøre det for, og jeg kan se på din senere kommentar at du endte med at bruge tråde, det havde jeg dog ikke læst da jeg foreslog det. Mht. at lave en executeable til Mac, så kan du bruge pyinstaller, hvis du stadig er interesseret i det, så forklare jeg det gerne nærmere :)
PyInstaller: https://pyinstaller.org/en/v4.1/usage.html
Hej Simon
Jeg har fundet ud af at complie til windows exe og har gjort det et par gange, men jeg vidste du sad på en Unix mascine.
pyinstaller cw-blender.py –onefile -w
Jeg har fået lidt feedback fra usa allerede. Enkelte har fået en exe fil andre py koden da de ikke er på windows. Nogle er dygtige programører andre kan kun cw.
Der er mange cw programmer til windows der drukner jeg, men der er ikke ret mange til Linux or Mac og der kan jeg ikke selv compile til s[ derfor har jeg frigivet koden.
Okay det giver mening. Det at lave executeables af Python programmer er også lidt et niche use case, så jeg kan godt forestille mig at der ikke er mange, især til Linux og Mac. Det er niche da de fleste som vil kører et Python program, også selv kan Python, og så fortrækker de fleste, inklusiv mig selv, at køre dem selv, af sikkerhedshensyn. Når den er compileret til en executeable så ved man jo reelt set ikke hvilken kode ligger deri, så det er derfor man kan få følelsen af at det er lidt atypisk at compilere dem, frem for at interpret dem.
Fejl i koden Det her skal ændres ellers ændrer den ikke skætm størrelse
def on_tab_change(event):
global window_width
selected_tab_index = notebook.index(notebook.select())
print(selected_tab_index) # Corrected variable name
if selected_tab_index == 5:
window_width = 1300
elif selected_tab_index == 0: # Use “elif” for proper condition checking
window_width = 350
else:
window_width = 600
center_window(root, window_width, window_height)
Hej Tommy,
God tilføjelse, det er helt rigtigt at skærmstørrelse er ikke noget jeg tager højde for her, men det er helt sikkert en god tilføjelse.
Hej Simon
Jeg har set den 16 timer lange youtube video fra Harward Universitet igennem og har fundet opgaverne har løst 2/8 set med hver 4-5 små opgaver i. Jeg er stort set færdig med min hoved opgave. Jeg havde et problem jeg havde glemt at give lyd til tal. Og jeg kunne ikke afspille lyd og trykke på en knap for at slukke lyden igen. Dette blev løst ved hjælp af tråde der afspiller lyden, så nu her i version 5.0 der ser det hele ud til at virke. Jeg er blevet bedt om at kunne ændre hurtigere hastigheder så om det kommer ved jeg ikke.
Ver 1.0 man kan øve bogstaver
Ver 2.0 Man kan øve ord
Ver 3.0 Man kan øve sætninger
Ver 4.0 Man kan øve radio relaterede sætninger
Ver 5.0 Man kan copy/Paste en text ind og afspille den. Og det problem med tal og stop af lyd blev løst.
Jeg ved ikke om der kommer mere.
Nu vil jeg løse resten af Harward CS50 opgaverne og når de er løst vil jeg måske tilmelde mig kurset så jeg bare skal sende opgave koderne ind så jeg kan få mit certifikat.
https://transfer.pcloud.com/download.html?code=5ZXu4F0ZnXLH68oiPOSZfDC3ZnzQIzw14cTXTsJMQxDyASXdp4EAX
Jeg frigiver først python koden senere så nu er der kun en windows exe fil tilrådighed som skulle være stabil nu. Men med python koden er der mulighed for at compile sin egen version til Linux eller Mac, det kan jeg ikke, og der findes ikke ret mange morsekode prograammer til Linux og Mac. Teksterne har jeg fra en ninja side som en fra USA har givet mig til mit andet Phrases trainer program til morserion+32. Det her bruger ikke bruger input så man skal selv skrive ned i en editor eller på et stykke papir når man øver, men kan så tjekke med programmet, eller man kan head copy da der kun bliver sendt en linje af gange inden den bliver udskrevet.
Hej Simon
Det med function til bogstverne var ikke en d[rlig ide. Men nu har jeg fået noget op at køre.
Jeg har dog en del problemer med at stoppe lyden hvis jeg vil pause før den er færdig.
https://transfer.pcloud.com/download.html?code=5ZdhLF0ZnXLH68oiPOSZfDC3ZCLSViIM2csRfApJXasEwiJcmddI7
Jeg er ikke færdig, der kommer mere men nu kan man øve bogstaver, ord og sætninger.
Det er kun exe filen jeg har lagt ud, og py filerne er fordeelt på en lydklasse og en styre klasse og en del lister med tekster.
Jeg har set Harward universitets videoen på youtbe og er gået i gang med opgaverne til kurset og vil måske bruge mit morsekode projekt som eksamens projekt. Nu løser jeg opgaverne før jeg deltager ik urset så jeg ikke får stress da det er indenfor en bestemt tidsperioede. Nu vil jeg så have opgaverne færdige lige til at uploade hvis jeg deltager det er mere afslappende.
ef sentences(wpm):
result_sentences_text.delete(1.0, tk.END) # Clear previous text
if sentences_checkbox_vars[“8 words”].get() == “agree”:
liste = words_8.sentences_8
elif sentences_checkbox_vars[“7 words”].get() == “agree”:
liste = words_7.sentences_7
elif sentences_checkbox_vars[“6 words”].get() == “agree”:
liste = words_6.sentences_6
elif sentences_checkbox_vars[“5 words”].get() == “agree”:
liste = words_5.sentences_5
elif sentences_checkbox_vars[“4 words”].get() == “agree”:
liste = words_4.sentences_4
elif sentences_checkbox_vars[“3 words”].get() == “agree”:
liste = words_3.sentences_3
elif sentences_checkbox_vars[“2 words”].get() == “agree”:
liste = words_2.sentences_2
for i in range(25):
selected_sentences = [sentences for sentences in liste]
if selected_sentences:
bog = rand.choice(selected_sentences)
for c in bog:
c = c.upper()
cp.play(c,wpm)
result_sentences_text.insert(tk.END, bog + “\n”)
root.update_idletasks()
time.sleep(1)
Jeg har prøvet at sætte en break bool ind efter sp.play() men den kunne ikke genkende variablen da jeg satte dens værdi der hvor jeg definere knappen
def agreement_sentences_button():
selected_value = wpm_sentences_combobox.get()
wpm = int(”.join(filter(str.isdigit, selected_value)))
sentences(wpm)
Hej Tommy,
Det ser godt ud, det er desværre ikke muligt at stoppe eksekvering af en funktion med den viden der er på kurset her. Det kan dog lade sig gøre. Når du kører et program så starter computeren der man kalder en ‘tråd’, den her tråd er den der står for at kører alt koden i programmet, men man kan starte flere tråde på en gang, så hvis du starter en tråd som vi kalder A, og A kører din sp,play() methode, så kan du samtidig lave en tråd B, og tråd B den venter på at du f.eks skriver noget i terminalen, og når den så får et input, så kunne du sige at når den modtager strengen stop, så skal du sætte din break bool til false, og eksekveringen af A skal stoppe.
Det er som sagt ud over hvad kurset her er ment til at undervise i, men hvis du er interesseret i det så finder jeg gerne nogle gode ressourcer du kan kigge på :)
Mvh.
Simon
Hej Simon
Nu fik jeg endelig noget til at virke med lyd til morsekode:
Det her ser ud til at virke, det er til at arbejde videre på.
import array
import math
import time
import pyaudio
text = “hej med dig”
def cw(duration=0,volume=0):
p = pyaudio.PyAudio()
fs = 44100
f = 440.0
# Generate samples (convert to float32 array)
num_samples = int(fs * duration)
samples = [volume * math.sin(2 * math.pi * k * f / fs) for k in range(0, num_samples)]
# Convert samples to bytes sequence
output_bytes = array.array(‘f’, samples).tobytes()
# Open audio stream and play
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=fs, output=True)
start_time = time.time()
stream.write(output_bytes)
#print(f”Played sound for {time.time() – start_time:.2f} seconds”)
stream.stop_stream()
stream.close()
p.terminate()
def play(c,wpm):
if c==”d”:
cw(60*3/wpm/30,0.5)
cw(60/wpm/30,0.5)
cw(60/wpm/30,0.5)
elif c==”e”:
cw(60/wpm/30,0.5)
elif c==”g”:
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
cw(60/wpm/30,0.5)
elif c == “h”:
cw(60/wpm/30,0.5)
cw(60/wpm/30,0.5)
cw(60/wpm/30,0.5)
cw(60/wpm/30,0.5)
elif c==”i”:
cw(60/wpm/30,0.5)
cw(60/wpm/30,0.5)
elif c==”j”:
cw(60/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
elif c==”m”:
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
elif c==” “:
cw(60*2/wpm/30)
cw(60/wpm/30)
print(text)
print(“10 wpm”)
for c in text:
play(c,10)
print(“20 wpm”)
for c in text:
play(c,20)
print(“30 wpm”)
for c in text:
play(c,30)
Hej Tommy,
Det ser godt ud, super fedt du får prøvet nogle ting. En ting du kan kigge lidt på er at få lidt mere struktur ind. F.eks når du skal afspille lyden for et bogstav, så i stedet for at gøre sådan f.eks
elif c==”j”:
cw(60/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
så ville jeg lave en funktion til hvert bogstav, så altså
def j():
cw(60/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
cw(60*3/wpm/30,0.5)
og så kan du gøre følgende
elif c==”j”:
j()
teknisk set så er det mere kode og kan derfor virke mindre overskueligt, men man får pakket tingene lidt ind, hvilket kan være nemmere jo større programmet bliver.
Hej Simon
Jeg havde bogen Python from scrach stående i min reol og er begyndt på den igen.
For at kunne vise mine opgaver nemmere til mine venner, som ikke kender Python, så har jeg pip pyinstaller og laver en exe fil.
Jeg kunne ikke få den til at starte exe fil op, men fandt ud af at mit hello world var et dos program og jeg ikke skulle have -w med kun –onefile. Jeg har også sat følgende kode ind i filen så den venter på et tastetryk::
import msvcrt as m
def wait_for_key():
m.getch()
# Call the function to wait for a key press
name = input(“Write you first name: “)
print(f”Hello {name}, do you want to learn some Python?”)
print(‘Albert Einstein once said: “A person who never made a mistake, never tried anything new.”‘)
wait_for_key()
Det her er kapitel 2 som jeg har sammenfattet lidt, der var en del sm[ opgaver som jeg har samlet til en opgave da det jo er nemt nok. Her galt det bare om at lave exe filen som jeg sendte med large fileuploade.
Halvdelen af bogen er grundl;ggende og resten er aplikationer som sm[ spil, s[ det skal nok blve spændende, hvis jeg når så langt. Det er lidt vigtigt for mig at jeg har nogen som jeg kan viose hvad jeg får lavet så jeg ikke står helt alene med min kodning hvis jeg går i stå. Lige nu sender jeg ikke .py filen med, men det kan være jeg gør senere når jeg er nået lidt længere.
Tommy
Hej Tommy,
Det lyder til at det lykkes med exe filen i sidste ende, eller misforstår jeg?
Fedt at høre at du også bruger andre resourcer, jeg prøver selvfølgelig mit bedst på at forklare det så godt som jeg kan, men det er altid godt at høre det forklaret på mere end en måde :)
Mvh.
Simon
main.py
from Tone import Tone
import time
wpm = 20
tal = 0.0667 / wpm * 60
text = “…. — .-.. .-.. —”
for t in text:
if t==”.”:
Tone.sine(700, duration=tal)
elif t==”-“:
Tone.sine(700, duration=tal*3)
else:
time.sleep(tal)
—-
Tony.py
import pygame
import numpy
import math
import time
pygame.init()
bits = 16
sample_rate = 44100
pygame.mixer.pre_init(sample_rate, bits)
def sine_x(amp, freq, time):
return int(round(amp * math.sin(2 * math.pi *freq *time)))
class Tone:
def sine(freq, duration=1, speaker=None):
num_samples = int(round(duration * sample_rate))
sound_buffer = numpy.zeros((num_samples,2), dtype = numpy.int16)
amplitude = 2 ** (bits – 1) – 1
for sample_num in range(num_samples):
t = float(sample_num) / sample_rate
sine = sine_x(amplitude, freq, t)
if speaker == “r”:
sound_buffer[sample_num][1] = sine
if speaker == “l”:
sound_buffer[sample_num][0] = sine
else:
sound_buffer[sample_num][1] = sine
sound_buffer[sample_num][0] = sine
sound = pygame.sndarray.make_sound(sound_buffer)
sound.play(loops=1, maxtime = int(duration * 1000))
time.sleep(duration)
Når jeg afspiller en lang tone lyder det fint nok, men når jeg forsøger at sende bogstaver ca 20 wpm 100 teng så lyder det ikke godt selvom det dog er læsbart.
Tommy
Sejt hvis du syntes sådan nogle ting er sjovt, så kunne det være en ide at kigge på Micro:bit, dem kan du programmere ved at skrive MicroPython, som bare er Python med ekstra funktioner.
Micro:bit https://microbit.org/
MicroPython: https://tech.microbit.org/software/micropython/
Tak for kurset, måske lidt for simpelt i forhold til det gratis kursus jeg havde taget lige før dette her kursus. Nu har jeg så fået et certifikat som jobcenteret anbefaler, selvom jeg næppe får job som førtidspensionist. Nu er det bare hvordan jeg nu kommer videre. Je3g fandt en Youtube video med lyd i Python og fik lige lavet et simpelt program der kunne sende “hello” i morsekode lyd ca 100 tegn 20 wpm. “…. — .-.. .-.. —“, jeg lavede ikke et dictonary til oversættelse af bogstaverne skulle kun lige teste lyden om det kunne forstår, men lyden der blev afbrud og sendt ud som bogstaver lød ikke særlig godt men kunne forstås. Jeg syntes det driller lidt i windows med Python3 og import af pakkerne, der er jeg nød til kun at bruge Python som kommando før det virker ellers kan den ikke finde pakken. Så nu er mit spørgsmålk, hvordan kommer jeg nu videre med at lære mere Python, for dette er jo kun en start som jeg ikke kan bruge til så meget endnu, men dette kursus giver et godt grundlag for forståelsen, og teorien er temmelig god. I det gratis kursus jeg tog på engelsk var quiz meget svært mens kode eksemplerne jeg skulle testes i var rimelig nemme. Jeg måtte ty til chatgpt til de sidste quiz spørgsmål. Men det er svært at finde rund i de tilbud om Python undervisning på nettet og jeg har brændt fingrene et par gange på dyre kurser der ikke var noget værd, men har også fundet gode gratis kurser, dog uden certifikater.
Tommy
Hej Tommy,
Selv tak. Godt at høre at du får prøvet nogle forskellige ting med det, det giver en meget bedre forståelse. Når du er på Windows så behøves du aldrig skrive Python3, der skal du bare skrive Python, på Mac og Linux har du både Python2 og Python3 installeret, så der er man nød til at skrive hvilken en man vil have, men på Windows har du kun Python3 derfor er det nok bare at skrive Python.
Mht. hvor du skal fortsætte, så vil jeg gerne vide mere om hvad du tænker du vil bruge Python til, så kan jeg meget bedre pege dig i en rigtig retning :)
Mvh.
Simon
Hej Simon,
Tak for kurset, det har været rigtigt fint.
Det bliver selvfølgelig sådan lidt “Monky see monky do” agtigt men det giver dog nok indlæring til at man kan komme igang med at studere python nærmere.
venlig hilsen
John Eistrøm
(årgang 1948)
Hej John,
Tak for de pæne ord. Det er dejligt at høre at du fik noget ud af det. Hvis det er noget du gerne vil bruge Python til (eller du kunne forestille dig du kan bruge det til men ikke er sikker), men du mangler noget viden om det, så må du endelig sige til, så kan jeg finde nogle ressourcer der kan hjælpe dig videre :)
Mvh.
Simon
Hej Simon,
Jeg vil gerne takke dig for et rigtig fint kursus jeg er meget tilfreds med! :)
Jeg har med stor interesse fulgt alle dine lektioner, med et rigtigt stort udbytte. Faktisk så stort at jeg efter at jeg havde taget dit kursus var i stand til at kaste mig ud i at lave mit eget første lille program til at håndterer mine data. Jeg er biokemiker og arbejder pt. på et stort masse spektrometrisk forskningsprojekt hvor jeg manglede en måde at håndterer alle mine mange data på da Excel, prism etc var blevet “for småt” til at håndterer mængden af det data jeg sidder med. Så selvom jeg har skulle Google lidt ekstra viden for at få lavet mit program (som jeg er lidt stolt over ;) ) så føler jeg at du klædte mig på til at forstå det basale i programmering samt den viden og modet til at Google det jeg manglede – som jeg har indset er meget vigtigt i programmering :)
Så jeg meget glad for at have fulgt dit kursus og synes derfor jeg lige vil skrive det til dig da det netop har været så godt at jeg nu også kan bruge det og er kommet videre i mit forskningsprojekt :)
Alt godt til dig fremover :)
De bedste hilsner,
Sanne G. Boelt
Hej Sanne,
Tusind tusind tak for de pæne ord! Det var med til at gøre min dag rigtig god :)
Og hvor er det dejligt at det kan bruges i din forskning, der kan python virkelig komme til sin ret. Jeg har en tante på Serum Institutet, og en roommate som Ph.d i biotek på KU, så jeg kender en lille smule til den verden. Du har også helt ret mht. Google, det er sådan man kommer videre, men det kan være uoverskueligt at finde rundt i, så det er fedt at du har fået mod på det.
Igen tusind tak fordi du tog dig tid til at skrive, og du er selvfølgelig velkommen til at skrive, selv hvis det går ud over “pensum”, jeg skal nok kunne hjælpe med hvad end du støder på :)
Mvh.
Simon