Sven Krauß
Uhrzeit: 16 - 18 Uhr
Aufgabe: Systemupdate
Einteilung in zwei Gruppen!
print("Hallo Welt")
ida = 5
ida
paul = 42
paul
print("Ida ist", ida)
print("Paul ist", paul)
print("Zusammen sind sie", (paul + ida))
ida=paul
print("Zusammen sind sie", (paul + ida))
Demo
zahl = input("Gib eine Zahl ein: ")
quadrat = zahl*zahl
print("Das Quadrat ist:", quadrat)
(Im Interpreter)
var = -5
type(var)
var = 5.0
type(var)
var = "Hallo Welt"
type(var)
var = "55"
type(var)
var = int(var)
type(var)
if [Bedingung]:
[Anweisung]
...
elif [Bedingung]:
[Anweisung]
...
else:
[Anweisung]
...
Bedingungen können sein:
if [Bedingung]:
[Anweisung1] #Innerhalb der Bedingung
[Anweisung2] #Innerhalb der Bedingung
...
[Anweisung3] #Gehört NICHT zur Bedingung
Ein zusammenhängender Code-Block wird anhand der Einrückung identifiziert.
alter = input("Wie alt bist du? ")
alter = int(alter)
if alter < 10:
print("Kind")
elif alter < 18:
print("Jugendlich")
else:
print("Erwachsen")
Aufgabe:
Erweitere das Beispiel so, dass auch "Rentner" ab eine Alter von 65 ausgegeben wird.
while Bedingung:
Anweisung
...
break
Zahlenraten
from random import randint
print("Rate eine Zahl zwischen 1 und 100")
zufallszahl = randint(1,100)
zahl = int(input("Dein Vorschlag: "))
while zahl != zufallszahl:
if zahl < zufallszahl:
print("Zu klein")
else:
print("Zu groß")
zahl = int(input("Dein Vorschlag: "))
print("Richtig!")
Aufgabe für die Profis:
Wie kann das Programm geändert werden, so dass die Abfrage int(input(...)) nur einmal programmiert werden muss
for X in I:
Anweisung
...
break
Beispiel Fakultät
f = 1
for i in range(1,10):
f = f * i
print("Fakultät von:", 9, "ist", f)
f = 1
for i in range(1,10):
f = f * i
print("Fakultät von:", 9, "ist", f)
f = 1
for i in range(1,18):
f = f * i
print("Fakultät von:", 17, "ist", f)
def name(parameter, ...):
Anweisung
...
return Wert (optional)
Beispiel Fakultät
def faku(inp):
f = 1
for i in range(1, inp + 1):
f = f * i
print("Fakultät von:", inp, "ist", f)
faku(9)
faku(17)
Rückgabewerte
def faku(inp):
f = 1
for i in range(1, inp + 1):
f = f * i
return f
x = faku(9)
print("Fakultät von:", 9, "ist", x)
print("Fakultät von:", 13, "ist", faku(13))
Aufgabe:
Schreibe eine Funktion, dass die Fibonacci-Folge erzeugt und anzeigt. Die Länge der Folge soll mit einem Funktions-Parameter geändert werden können.
import random
import math
zufallszahl = random.randint(1,100)
s = math.sin(0.5)
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
import time
import RPi.GPIO as GPIO
led_pin = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT)
try:
while True:
GPIO.output(led_pin, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(led_pin, GPIO.LOW)
time.sleep(0.5)
except KeyboardInterrupt:
pass
GPIO.cleanup()
import time
import RPi.GPIO as GPIO
tast_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(tast_pin, GPIO.IN, pull_up_down = GPIO.PUD_UP)
try:
while True:
time.sleep(0.5)
if GPIO.input(tast_pin) == GPIO.HIGH:
print("Taster (nicht) gedrückt")
else:
print("Taster (nicht) gedrückt")
except KeyboardInterrupt:
pass
GPIO.cleanup()
Aufgabe: Ändere das Programm so ab, dass nur die Ereignisse "Taste gedrückt" und "Taste losgelassen" ausgegeben werden.
import time
import RPi.GPIO as GPIO
tast_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(tast_pin, GPIO.IN, pull_up_down = GPIO.PUD_UP)
# Callback-Funktion
def ereignis(channel):
print("Taster gedrückt")
GPIO.add_event_detect(tast_pin, GPIO.FALLING,
callback = ereignis, bouncetime = 200)
try:
while True:
time.sleep(0.5)
except KeyboardInterrupt:
pass
GPIO.cleanup()
Neuere Raspberry Pi OS verwenden eine andere Schnittstelle für die event_detect Funktion. Hier hilft es eine andere Bibliothek zu verwenden.
sudo apt install python3-rpi-lgpio
Aufgabe: Ändere das Programm so ab, dass die LED genau 3x blinkt wenn der Taster gedrückt wird.
ip a
Server-Seite
netcat -l -p 50000
Client-Seite
netcat X.X.X.X 50000
import sys
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("", 51000))
sock.listen(1)
while True:
print("Warte auf deinen Spieler ")
spieler, addr = sock.accept()
print("Spieler hat sich verbunden. Seine Adresse ist ", addr)
try:
while True:
print("Warte auf Frage...")
frage = spieler.recv(256)
if frage:
print("Emfangen: " + frage.decode())
antwort = input("Tippe die Antwort ein und dann ENTER: ")
spieler.sendall(antwort.encode())
else:
print("EOF")
break
finally:
spieler.close()
import sys
import socket
import time
spieler = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Verbinde zum Spieler ...")
spieler.connect(("10.2.15.154", 51000))
print("Verbunden")
try:
while True:
frage = input("Tippe deine Frage ein und dann ENTER: ")
spieler.sendall(frage.encode())
print("Warte auf die Antwort")
antwort = spieler.recv(256)
print("Antwort: " + antwort.decode())
finally:
print("Cleanup")
sock.close()
(1) Schließe einen Taster am Rasperry PI an. Bei Betätigung des Tasters soll eine Nachricht an den Client gesendet werden.
(2) Schließe eine LED am Rasperry PI an. Bei Empfang der Nachricht "an" soll die LED angehen und bei Emfang der Nachricht "aus" entsprechend aus.
Quelle: How does email work
| Abk. | Beschreibung |
|---|---|
| MUA | Mail User Agent. |
| MSA | Mail Submission Agent. |
| MTA | Mail Transfer Agent. |
| MDA | Mail Delivery Agent. |
| MRA | Mail Retrieval Agent. |
sudo apt update
sudo apt install geary
Starte Geary und richte dein Account ein.
from email.message import EmailMessage
def create_msg(from_addr, to_addr, inhalt):
msg = EmailMessage()
msg.set_content(inhalt)
msg['Subject'] = "Mein Betreff"
msg['From'] = from_addr
msg['To'] = to_addr
return msg
import smtplib, ssl
def send_msg(from_addr, msg):
server = "w00962be.kasserver.com"
port = 465
# Login Passwort abfragen
prompt = "Login für {}: ".format(from_addr)
passwort = input(prompt)
# Sichere Verbindung aufbauen, einloggen und senden
ssl_ctx = ssl.create_default_context()
s = smtplib.SMTP_SSL(server, port, context=ssl_ctx)
s.login(from_addr, passwort)
s.send_message(msg)
s.quit()
import sendmail
inhalt = "Langer langer text"
sender = "tn1@phaenovum.de"
empfänger = "tn2@phaenovum.de"
nachricht = sendmail.create_msg(sender, empfänger, inhalt)
sendmail.send_msg(sender, nachricht)
(1) Erstelle ein Programm, mit einem Tastendruck eine E-Mail versendet.
(2) Binde den Abstandssensor ein und schicke eine Mail mit dem gemessenen Wert.
Installation im Terminal:
sudo apt update
sudo apt full-upgrade
cd Downloads
sudo apt install ./sonic-pi_4.6.0_2_trixie.arm64.deb
play 60
play 60
play 67
play 69
play 60
sleep 0.5
play 62
sleep 0.5
play 64
sleep 0.5
play 60
sleep 0.5
Wer kenn dieses Lied?
2.times do
play 60
sleep 0.5
play 62
sleep 0.5
play 64
sleep 0.5
play 60
sleep 0.5
end
sample :loop_amen, rate: 1, amp: 1.0
live_loop :flibble do
sample :bd_haus, rate: 1
sleep 0.5
end
live_loop :flibble do
sample :bd_haus, rate: 1
sleep 0.25
sample :drum_cymbal_closed
sleep 0.25
end
live_loop :flibble do
sample :bd_haus, rate: 1
sleep 0.25
sample :drum_cymbal_closed
sleep 0.25
end
live_loop :ambi do
sample :ambi_choir, rate: 0.3
sleep 2
sample :ambi_piano, rate: 0.8
sleep 2
end
with_fx :echo, mix: 0.6, phase: 0.25 do
sample :guit_em9, rate: 0.5
end
Weitere Effekte:
with_fx :reverb, mix: 0.5 do ... endwith_fx :distortion, mix: 0.7 do ... endwith_fx :slicer, phase: 0.25 do ... endwith_fx :wobble, phase: 0.5 do ... end
live_loop :ralf do
synth :tb303, note: :e1, release: 4, cutoff: 120
sleep 4
end
Weitere Synthesizer:
notes = (ring :E4, :Fs4, :B4, :Cs5, :D5, :Fs4,
:E4, :Cs5, :B4, :Fs4, :D5, :Cs5)
use_synth :supersaw
live_loop :slow do
play notes.tick, release: 0.1
sleep 0.2
end
live_loop :faster do
play notes.tick, release: 0.1
sleep 0.198
end
use_debug false
bizet_bass = (ring :d, :r, :r, :a, :f5, :r, :a, :r)
#bizet_bass = (ring :d, :r, :r, :Bb, :g5, :r, :Bb, :r)
with_fx :reverb, room: 1, mix: 0.3 do
live_loop :bizet do
with_fx :slicer, phase: 0.125 do
synth :blade, note: :d4, release: 8,
cutoff: 100, amp: 1.5
end
16.times do
tick
play bizet_bass.look, release: 0.1
play bizet_bass.look - 12, release: 0.3
sleep 0.125
end
end
end
live_loop :ind do
sample :loop_industrial, beat_stretch: 1,
cutoff: 100, rate: 1
sleep 1
end
live_loop :drums do
sample :bd_haus, cutoff: 110
synth :beep, note: 49, attack: 0, release: 0.1
sleep 0.5
end