Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

Python Grundlagen

6.632 Byte hinzugefügt, 18:49, 18. Apr. 2019
/* Spracherkennung */
= Software für Pythonentwicklung =
 
== Python3 installieren ==
=== Windows ===
 
=== MacOS ===
Python2.7 ist bei halbwegs aktuellen Systemen schon da, aber nicht python3 und auch kein pip. [https://brew.sh Homebrew] scheint hier ein gutes Mittel python3 und gleich pip3 in einem Abwasch zu installieren. Dazu erst Homebrew installieren, dann python3 via <code>brew install python3</code>.
 
=== Raspbian ===
Unter einem aktuellen Raspbian (Stretch) ist python3 und pip3 normalerweise bereits installiert. Ansonsten hilft für pip3 <code>sudo apt-get install python3-pip</code>
 
=== Debian apt basierte Linux Systeme (...buntu etc) ===
Auch hier ist python3 und pip3 oft schon installiert. Ansonsten hilft hier ein <code>sudo apt install python3-pip</code>
 
=== Wo befindet sich dann alles? ===
Der Pfad zu Python<br>
<pre>
import sys
sys.prefix
>>> 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37'
</pre>
Der Pfad zu den 3th party libs<br>
<pre>
import site
site.getsitepackages()
>>> 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages'
</pre>
 
== Python Interaktive Shell ==
* Aufruf mit <code>python</code> oder <code>python3</code> für einfache Konsole, besser ist <code>idle3</code>
* Verlassen mit Ctrl+D (Mac, Linux) bzw. Ctrl+Z (Win) oder exit() oder quit()
* Schleifen sind möglich: <code>for i in range(10):</code>
** der Prompt ändert sich zu <code>....</code>, es muss nun eingerückt werden
** eine leere Zeile beendet die Eingabge der Schleifenbefehle und führt sie aus
* auch gut um auszuprobieren, ob libs installiert sind: <code>import numpy</code> oder in der commandozeile <code>pip freeze</code> eingeben um die Liste der installierten Pakete zu sehen.
* History mit Alt+n/Alt+p (Mac: Ctrl+p/Ctrl+n)
 
== Python IDEs ==
[https://wiki.python.org/moin/IntegratedDevelopmentEnvironments Hier] gibt es eine Liste von Python-IDE's.
 
Empfohlen wird für Mac/Win/x86-Linux: [https://www.jetbrains.com/pycharm/ PyCharm Community Edition] (leider zu schwer für Raspberry)
= Python Cheat-Sheet für Wursthakenprogrammierer =
 
== Wichtigste Unterschiede zu C ==
* Strukturierung mit Einrückungen (Space statt Tabs bevorzugt) statt Wursthaken {}, meist endet die Zeile dann mit einem :
* Bei Python3 erkennt man Funktionen und Methoden an (), z.B. <code>print("Hello World.")</code>
* Print:
** Auszugebenes Zeug muss zwischen die Klammern <code>print(a)</code>
** Texte in "-Zeichen <code>print("Hallo ")</code>
** Kombinationen aus Variablen und Text:
*** Einfachste Variante: Sachen mit Kommas trennen <code>print("Wert a ist",a,",b ist",b)</code>
*** Mit Platzhalter unformatiert: <code>print("Wert a ist {}, b ist {}".format(a,b))</code>
*** Aneinandergenagelt: <code>print("Wert a ist "+str(a)+", b ist "+str(b))</code>
*** printf-like (veraltet): <code>print("Wert a ist %d, b ist %d" % (a,b))</code>
* For-Schleife gibt's nur als For-Each - hier hilft range():
** C: <code>for(int i=0;i<10;i++) {}</code>
** Python: <code>for i in range(10): # geht von 0...9</code>
** Durch Listen iterieren:
<pre>list1=[2,3,4]
 
# geht durch alle Elemente, gibt nur die Elemente zurück
for t in list1:
print(t)
 
# gibt Elemente und Indexe zurück
for i,elm in enumerate(list1):
print("The {} item is {}".format(i,elm))
</pre>
* ? Operator von C: aus <code>y?x:z</code> wird <code>x if y else z</code>
* switch: gibts nicht in Python, kann man aber irgendwie mit dictionaries machen
* Mehrzeilige Kommentare werden mit 3 Hochkommas definiert <pre>''' so werden mehrzeilige Kommentare geschrieben, dieser ist aber nur einzeilig '''</pre>
* Boolsche Operatoren sind wie folgt in Python:
** C: <code>&&</code> -> Python: <code>and</code>
** C: <code>||</code> -> Python: <code>or</code>
** Aber: Binäre Operatoren <code>&</code> bzw. <code>|</code> funktionieren wie in C
* Sehr nützlich aber ungewohnt auf den ersten Blick: Funktionen können mehrere Werte zurückgeben - die werden dann mit Komma getrennt wieder eingesammelt:
<pre>
# so einfach macht man eine Funktion mit zwei Rückgabewerten...
def ret2(a,b):
a += 1
b += 2
return a, b
 
# ...und so einfach nutzt man sie
c, d = ret2(10, 20)
print(c, d)
</pre>
 
= Raspberry =
 
Um ein ausführbares Skript zu erzuegen muss in der ersten Zeile das Shebang stehen.<br>
<code>#!/usr/bin/python3</code><br>
Um an den Pfad der Pythoninstallation zu kommen kann wahlweise python oder python3 mit which aufgerufen werden.<br>
<code>which python3</code>
 
Danach noch die Datei ausführbar machen.<br>
<code>chmod +x filename.py</code>
 
Und zum Schluss ausrühren.<br>
<code>./filename.py</code>
 
= Von Python2 nach Python3 =
Mit dem folgenden Befehl kann man python2-Skript automatisch nach python3 umwandeln: <code>2to3 -w DATEINAME.py</code>.
 
Wenn man dann noch in die erste Zeile des Python3-Skriptes folgendes einfügt: <code>from __future__ import print_function</code> läuft das Skript evtl unter beiden python Versionen, da man damit unter Python2 auch die Python3-Print-Syntax nutzen kann.
= Python Bibliotheken =
 
{|
| style="width:160px;" | [http://www.numpy.org/ NumPy]
| Bibliothek für eine einfache Handhabung von Vektoren, Matrizen oder generell großen mehrdimensionalen Arrays und Numerische Mathematik.
|-
| [https://www.eclipse.org/paho/ paho-mqtt]
| MQTT-Client um mit unserem [[MQTT|Mosquitto]] ([[ServiceIoTServer|MQTT-Server]]) zu kommunizieren
|-
| [https://pillow.readthedocs.io/en/stable/ Pillow]
| Liest, schreibt und bearbeitet viele Grafikdateien. Hinweis: Pillow installieren, bei der Nutzung aber PIL schreiben: <code>from PIL import Image</code> schreiben. Die Lib ersetzt alte PIL und Image Libs.
|-
| [https://matplotlib.org/ matplotlib]
| Plotten von Graphen in [https://matplotlib.org/gallery/index.html diversen] Geschmacksrichtungen.
|}
 
<br>
Nicht alle Bibliotheken lassen sich unter Windows mit pip istallieren. Manche wollen kompiliert werden und dann wirds kompliziert wie z.B. PyAudio.<br>
Es gibt aber schon vorkompilierte Binaries auf dieser Seite zum downloaden und manuellen installieren: https://www.lfd.uci.edu/~gohlke/pythonlibs/
 
= Spracherkennung =
 
<pre>pip install SpeechRecognition</pre>
 
Für das Mikrophone braucht man PyAudio
<pre>pip install PyAudio</pre>
Under windows muss dass gebaut werden, um das zu umgehen das Wheel manuell herunter laden.
https://www.lfd.uci.edu/~gohlke/pythonlibs/<br>
<pre>pip install PyAudio-0.2.11-cp37-cp37m-win_amd64.whl</pre>
 
<pre>
import speech_recognition as sr
 
r = sr.Recognizer()
 
with sr.Microphone() as mp:
print('say')
audio = r.listen(mp)
try:
#print(r.recognize_sphinx(audio))
print(r.recognize_google(audio, language="de-DE"))
except:
pass
</pre>
688
Bearbeitungen