Seite 1 von 1

Skript lässt sich nicht ausführen

Verfasst: Donnerstag 26. November 2020, 16:44
von Python567
Hallo zusammen,
da ich meinen Sprachassistenten doch noch fertig bekommen habe, wollte ich ihn jetzt ausführen. Als ich aber das Skript mit einem Doppelklick öffnen wollte, hat sich ein Fenster geöffnet und sogleich wieder geschlossen. Mach ich das falsch oder stimmt was mit meinem Skript nicht?

Code: Alles auswählen

def speak(audio):
       pass      #For now. We will write the conditions later.
import pyttsx3
engine = pyttsx3.init('sapi5')
voices = engine.getProperty('voices') #getting details of the current voice
engine.setProperty('voice', voice[0].id)
def speak(audio):
   engine.say(audio) 
   engine.runAndWait() #Without this command, speech will not be audible to us.
if __name__=="__main__" :
    speak("Hello World! Hope you all are doing well.")
import datetime
def wishme():
   hour = int(datetime.datetime.now().hour)
def wishMe():
    hour = int(datetime.datetime.now().hour)
    if hour>=0 and hour<12:
        speak("Good Morning!")
    elif hour>=12 and hour<18:
        speak("Good Afternoon!")   
    else:
        speak("Good Evening!")  
    speak("Welcome! Please tell me how may I help you")
import speechRecognition as sr
def takeCommand():
    #It takes microphone input from the user and returns string output
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Listening...")
        r.pause_threshold = 1
        audio = r.listen(source)
try:
        print("Recognizing...")    
        query = r.recognize_google(audio, language='en-in') #Using google for voice recognition.
        print(f"User said: {query}\n")  #User query will be printed.
    except Exception as e:        # print(e)  use only if you want to print the error!
        print("Say that again please...")   #Say that again will be printed in case of improper voice 
        return "None" #None string will be returned
    return query
import wikipedia
if __name__ == "__main__":
    wishMe()
    while True:
        query = takeCommand().lower() #Converting user query into lower case
        # Logic for executing tasks based on query
        if 'wikipedia' in query:  #if wikipedia found in the query then this block will be executed
            speak('Searching Wikipedia...')
            query = query.replace("wikipedia", "")
            results = wikipedia.summary(query, sentences=2) 
            speak("According to Wikipedia")
            print(results)
            speak(results)
elif 'open youtube' in query:
            webbrowser.open("youtube.com")
elif 'open google' in query:
            webbrowser.open("google.com")
elif 'play music' in query:
            music_dir = 'D:\\Non Critical\\songs\\Favorite Songs2'
            songs = os.listdir(music_dir)
            print(songs)    
            os.startfile(os.path.join(music_dir, songs[0]))
elif 'the time' in query:
            strTime = datetime.datetime.now().strftime("%H:%M:%S")    
            speak(f"Ma'am, the time is {strTime}")

Re: Skript lässt sich nicht ausführen

Verfasst: Donnerstag 26. November 2020, 17:35
von __blackjack__
@Python567: Konsolenanwendungen startet man in einer Konsole und nicht per Doppelklick. Dann siehst Du auch den Syntaxfehler wegen der kaputten Einrückung.

Weitere Anmerkungen: Importe gehören an den Anfang des Moduls.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Und dann gibt es am Ende genau *ein* ``if __name__ == "__main__":`` in dem diese Funktion aufgerufen wird.

Eingerückt wird mit vier Leerzeichen pro Ebene. Und 60+ Zeilen ohne eine einzige Leerzeile ist schwer lesbar.

Es werden einige undefinierte Namen verwendet und einige Namen die definiert werden, werden nicht verwendet.

Das sieht ja so ein bisschen so aus als wäre das aus einem Tutorial oder Blogbeitrag kopiert der so ein Programm entwickelt und nicht selbst geschrieben.

Re: Skript lässt sich nicht ausführen

Verfasst: Donnerstag 26. November 2020, 17:37
von __blackjack__
Ach guck mal, der Code hier kommt doch bekannt vor: https://www.geeksforgeeks.org/voice-ass ... ng-python/

Re: Skript lässt sich nicht ausführen

Verfasst: Donnerstag 26. November 2020, 17:50
von sparrow
@Python567: Das Problem beim Programmieren: Man sollte grundsätzlich auch verstehen, was man tut. Das tut man nicht automatisch - das muss man lernen. Es hilft aber nicht Code einfach zusammenzukopieren und zu hoffen, dass es irgendwie funktioniert. Der Code ist wirklich krude. Da werden Importe nicht an den Anfang gestellt, Funktionen definiert und später dann noch einmal anders definiert. Es gibt eine Funktin wishme und eine Funktion wishMe. Die elifs am Ende haben gar nichts mit der if-Condition zu tun, der sie zugeordnet sind, weil die Einrückung nicht stimmt.

Wenn du Python lernen willst, dann ist das offizielle Tutorial ein guter Einstieg.