Nie potrafię się pozbyć tego problemu, dwa dni temu zacząłem się uczyć pythona i prosiłbym o pomoc :) W internecie widziałem dużo rozwiązań ale do pętli for, a nie do ifów. Tutaj cały kod gdyby ktoś potrzebował :
import speech_recognition as sr
import pyttsx3
import pywhatkit
import datetime
import wikipedia
import locale
import webbrowser
import ctypes
import subprocess
import pywintypes
import winshell
listener = sr.Recognizer()
engine = pyttsx3.init()
engine.setProperty("rate", 150)
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[2].id)
firefox = webbrowser.get('"C:\\Program Files\\Mozilla Firefox\\firefox.exe" %s')
locale.setlocale(locale.LC_ALL, 'pl_PL')
wikipedia.set_lang('pl')
def talk(text):
engine.say(text)
engine.runAndWait()
def take_command():
try:
with sr.Microphone() as source:
print('Słucham...')
command = 0
voice = listener.listen(source)
command = listener.recognize_google(voice, language='pl-PL')
command = command.lower()
if 'jarvis' in command:
command = command.replace('jarvis', '')
print(command)
except:
pass
return command
def run_assistant():
command = take_command()
print(command)
if 'włącz' in command:
song = command.replace('włącz', '')
talk('odtwarzam ' + song)
pywhatkit.playonyt(song)
elif 'puść' in command: #muzyka
song = command.replace('puść', '')
talk('odtwarzam ' + song)
pywhatkit.playonyt(song)
elif 'godzina' in command: #data i godzina
time = datetime.datetime.now().strftime('%X')
talk('Jest' + time)
elif 'dzień' in command:
time = datetime.datetime.today().strftime('%x')
talk('Jest' + time)
elif 'datę i godzinę' in command or 'data i godzina' in command:
time = datetime.datetime.now().strftime('%c')
talk('Jest' + time)
elif 'kto to jest' in command: #wiki
person = command.replace('kto to jest', '')
info = wikipedia.summary(person, sentences = 2)
talk(info)
elif 'kim jest' in command:
person = command.replace('kim jest', '')
info = wikipedia.summary(person, sentences = 1)
talk('Według wikipedii' + info)
elif 'co to jest' in command:
rzecz = command.replace('', '')
info = wikipedia.summary(rzecz, sentences = 2)
talk('Jak podaje google'+ info)
elif 'gdzie znajduje się' in command:
miasto = command.replace('', '')
info = wikipedia.summary(miasto, sentences = 2)
talk("W internecie jest napisane że" + info)
elif 'wyszukaj gdzie położone jest miasto' in command:
miasto = command.replace('wyszukaj gdzie położone jest miasto', '')
firefox.open("https://www.google.pl/maps/place/" + miasto)
elif 'wyszukaj gdzie leży' in command:
miasto = command.replace('wyszukaj gdzie leży', '')
firefox.open("https://www.google.pl/maps/place/" + miasto)
elif 'otwórz google' in command or 'wejdź w google' in command or 'odpal google' in command or 'wejdź na google' in command: #otwieranie kart
talk("Otwieram google")
firefox.open("google.com")
elif 'otwórz facebooka' in command or 'wejdź na facebooka' in command or 'uruchom fejsa' in command or 'wejdź na fejsa' in command or 'odpal fejsa' in command or 'odpal facebooka' in command:
talk("Otwieram facebooka")
firefox.open("facebook.com")
elif 'otwórz facebook' in command or 'wejdź na facebook' in command:
talk("Otwieram facebooka")
firefox.open("facebook.com")
elif 'wyszukaj informacje na temat' in command or 'znajdź informacje na temat' in command:
command = command.replace('wyszukaj informacje na temat', '')
command = command.replace('znajdź informacje na temat', '')
firefox.open('https://www.google.com/search?q='+command)
elif 'sprawdź w google' in command or 'wyszukaj w google' in command:
command = command.replace('sprawdź w google', '')
command = command.replace('wyszukaj w google', '')
firefox.open('https://www.google.com/search?q='+command)
elif 'zablokuj ekran' in command or 'wyloguj' in command: #systemowe
talk("Robi się")
ctypes.windll.user32.LockWorkStation()
elif 'wyłącz system' in command or 'wyłącz komputer' in command:
talk("Rozpoczynam wyłączanie systemu, do zobaczenia")
subprocess.call('shutdown / p /f')
elif 'zrestartuj system' in command or 'zresetuj system' in command or 'wykonaj restart systemu' in command:
subprocess.call(["shutdown", "/r"])
elif "rozpocznij hibernacje" in command or "uśpij" in command:
talk("Rozpoczynam uśpienie systemu")
subprocess.call("shutdown / h")
elif 'wyloguj mnie' in command or 'wyloguj z systemu' in command or 'wyloguj system' in command:
talk('Upewnij się że zamknąłeś wszystkie aplikacje, wylogowywuje')
time.sleep(10)
subprocess.call(["shutdown", "/l"])
elif 'napisz notatkę' == command or 'zanotuj coś dla mnie' == command or 'zanotuj' == command or 'zapisz notatkę' == command:
talk("jaka ma być treść notatki?")
note = take_command()
file = open('as.txt', 'w')
file.write(note)
print(note)
elif 'przeczytaj ostatnią notatkę' == command or 'otwórz ostatnią notatkę' == command or 'przeczytaj mi ostatnią notatkę' == command or 'przeczytaj ostatnią zapisaną notatkę' == command:
talk('Treść ostatniej notatki to')
file = open('as.txt', 'r')
talk(file.read())
elif "0" == command:
command - command.replace("0", "")
else:
talk('Nie zrozumiałam, możesz powtórzyć?')
while True:
run_assistant()
line 48, in run_assistant if 'włącz' in command: TypeError: argument of type 'int' is not iterable
dodatkowo pokazuje się błąd line 137, in <module> run_assistant()
Jeśli macie jakieś porady odnośnie samego kodu, estetyki pisania, czy prostszych rozwiązań piszcie śmiało.
Zależy mi na tym, żeby program nasłuchiwał w nieskończoność, a niestety po dłuższej bezczynności w kompilatorze wywala właśnie te błędy. Jeśli od razu zadaję pytania to wszystko działa.
Ostatnie pytanie: Czy jest możliwość zmiany czytania daty z datetime unikając czytania " dwadzieścia dziewięć, zero sześć, dwadzieścia dwadzieścia dwa" i przełożenia to w jakikolwiek sposób na polski (miesiące) oraz poprawną składnie -> dwudziesty dziewiąty czerwca dwutysięczny dwudziesty drugi rok? z godziną mam ten sam problem.
Dziękuję <3