Nachdem ich mal wieder viel zu lange nichts mit Python gemacht hatte, wollte ich wenigstens wieder die rudimentären Kenntnisse reaktivieren und fand die Idee mit dem TextToSpeech recht spannend, die vor kurzem im Forum Erwähnung fand.
Naja, daraus ist nachfolgendes kleines Programm entstanden.
Mir geht's letztlich um die Umwandlung der 1 in 'eine', so daß die Sprachausgabe korrekt ist.
Wie stellt man das gescheit an?
Ursprünglich wollte ich alles direkt in der list comprehension machen, bin daran allerdings gescheitert, weil mir ein 'else-Zweig' fehlte. Ich könnte natürlich eine Liste der Elemente (gut, in diesem Fall nur zwei, aber mir geht's um eine allgemeine Lösung) an die Funktion 'one' übergeben und dort dann den Austausch vornehmen - aber ist das die 'pythonische Lösung'? Irgendeinen Kniff gibt's da doch bestimmt. Ein list.replace() scheint's ja nicht zu geben...
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
import subprocess, random
digits = 7
correct = 0
wrong = 0
def say(text):
p = subprocess.Popen(['say', text])
p.wait()
def one(n):
if n == 1:
return 'eine'
else:
return n
tts = '''Willkommen bei einem Gedächtnistrainer für Mac OS X!
Zum Beenden bitte einfach RETURN drücken.'''
print tts
say(tts)
while True:
randomints = [str(random.randint(0, 9)) for _ in range(digits)]
randomstring = ''.join(randomints)
say('.'.join(randomints))
# ohne die Punkte macht der Mac daraus eine einzige Zahl
answer = raw_input('Antwort: ')
if answer:
if answer == randomstring:
say('Korrekt.')
correct += 1
else:
say('Leider falsch.')
wrong += 1
print 'Die richtige Antwort wäre gewesen %s' % randomstring
else:
break
print '\n%d richtige und %d falsche Antwort(en).' % (correct, wrong)
correct, wrong = [one(l) for l in (correct, wrong)]
tts = '%s richtige und %s falsche Antwort bzw. Antworten.' % (str(correct), str(wrong))
say(tts)
Daniel