Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

Python Grundlagen

4.995 Byte hinzugefügt, 18:49, 18. Apr. 2019
/* Spracherkennung */
=== Debian apt basierte Linux Systeme (...buntu etc) ===
Auch hier ist python3 und pip3 oft schon installiert. Ansonsten hilft hier ein <code>sudo apt-get install python3-pip</code> === Wo befindet sich dann alles? ===Der Pfad zu Python<br><pre>import syssys.prefix>>> 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37'</pre>Der Pfad zu den 3th party libs<br><pre>import sitesite.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. <precode>print("Hello World.")</precode>* 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: <precode>for(int i=0;i<10;i++) {}</precode>** Python: <precode>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ückfor t in list1: print(t) # gibt Elemente und Indexe zurückfor 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 siec, 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