@siggi: Du merkst ja selber das man sich immer die Frage stellen muss „gibt's dass schon für Python 3”, und in einigen Fällen ist die Antwort halt „Nein”. Dann stelle ich mir die Gegenfrage „Was bringt mir Python 3 gegenüber Python 2 an Vorteilen”, da komme ich auf die Antwort „wenig”. Dann ist die nächste naheliegende Frage ob die Nachteile die Vorteile aufwiegen. Und das tun sie, zumindest für mich, überhaupt nicht.
Programmierbücher für Kids werden wahrscheinlich mit Python und der Standardbibliothek oder wenigen externen Modulen auskommen. Ich habe eine Menge Python-Code der eine Menge Module verwendet. Nicht alles davon ist für Python 3 verfügbar. Das heisst einiges kann ich nicht portieren und bei dem was ich portieren kann, habe ich die Arbeit es zu portieren um dann den Vorteil… ja welchen eigentlich?
Solange Python 3 nicht das Standardpython bei den meisten Linux-Distributionen ist, und man alles (für mich wichtige) was man jetzt für Python 2 über die Paketverwaltung auch für Python 3 installieren kann, lohnt es sich für mich nicht auf Python 3 umzusteigen. Selbst dann habe ich beruflich noch mit Python-Versionen bis runter zu 2.4 zu tun. (Ja ich weiss, das ist bitter.
)
Als „Datenhandschuh” würde ich die Wiimote nicht bezeichnen. Von einem Datenhandschuh würde man deutlich mehr Daten als nur Ausrichtung und Beschleunigung erwarten. Also insbesondere die Stellung der Finger, so dass man den Fingerspitzen und jedem Fingergelenk eine relative Position im Raum zuordnen kann. Und die Sensordaten der Wiimote sollte heute eigentlich jedes Smartphone liefern können. Oder man bastelt sich selbst etwas.
VPython ist mir als Projekt etwas suspekt. Wenn man das in aktuell für Linux haben möchte, schlagen die einem allen ernstes als empfehlenswertes Vorgehen vor die aktuelle Version mit Wine laufen zu lassen. Also auch Python in der Windowsversion zu installieren. WTF‽
Python 3-Unterstützung gab es mal bei VPython 5.x, aktuell bei VPython 6.x wieder nicht.
Sprachausgabe ist bedeutend einfacher als Spracheingabe. Für Windows gibt es wohl Python-Module mit denen man die „Windows Speech Recognition”-API und „Dragon NaturallySpeaking” verwenden kann. Keine Ahnung ob die was taugen. Ausserdem bietet Google eine Web-API an. Aber da würde man Google Daten in den Rachen werfen und die API hat sicher irgendwelche Begrenzungen, weil Audiodaten nicht gerade klein sind.
Für das Ausgangsproblem habe ich noch mal eine Lösung mit hilfe eines externen Moduls geschrieben:
Code: Alles auswählen
#!/usr/bin/env python
from inspect import getargspec
from pyconstraints import Problem
def main():
problem = Problem()
for variable in 'abcde':
problem.add_variable(variable, (True, False))
constraints = [
lambda a, b: (a and b) or (not a),
lambda b, c: (b and not c) or (not b and c),
lambda d, e: not d and e,
lambda c, e: (c and e) or (not c and not e),
lambda a, d, e: (d and a and e) or (not d),
]
for constraint in constraints:
problem.add_constraint(constraint, getargspec(constraint).args)
for solution in problem.iter_solutions():
print solution
if __name__ == '__main__':
main()
Hier muss man nur noch die Variablen und ihre möglichen Werte und die Bedingungen in Form von Funktionen angeben. Der eigentliche Algorithmus die Lösung(en) zu finden steckt in dem externen Modul.
Das ist in diesem Fall mit Kanonen auf Spatzen geschossen, weil der Suchraum mit 32 möglichen Fällen natürlich klein genug ist um ihn selbst auf einem C64 schnell durchzuprobieren. Aber das ist vielleicht auch dem Umstand geschuldet, dass das eine Problemstellung war, die 1982 in BASIC auf damaligen Rechnern umsetzbar sein musste. Wenn man mehr Variablen und mehr als nur zwei Möglichkeiten pro Variable hat, dann explodiert der Suchraum und man kommt schnell in Grössenordnungen von 10 Milliarden Möglichkeiten die man prüfen müsste wenn man es „brute force” macht. Da haben wir hier mal ein Beispiel gehabt:
http://www.python-forum.de/viewtopic.php?f=1&t=27986
Das waren mehrere Formeln der Form 'ABC+BDE=FGH' wo jeder Buchstabe für eine Ziffer steht und die Frage war welcher Buchstabe für welche Ziffer(n) stehen kann. Ein Java-Programm das alle Kombinationen durchprobiert hat, lief auf meinem Rechner ≈1½ Minuten, eine Python-Lösung mit `logilab.constraint` nur 2 Sekunden.