• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja jeżeli - TypeError: argument of type 'int' is not iterable

Object Storage Arubacloud
0 głosów
255 wizyt
pytanie zadane 29 czerwca 2022 w Python przez mvny Nowicjusz (120 p.)
edycja 29 czerwca 2022 przez mvny

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

1 odpowiedź

+1 głos
odpowiedź 29 czerwca 2022 przez adrian17 Ekspert (344,860 p.)

 w kompilatorze

Nie ma kompilatora, po prostu program działa.

Jak spojrzysz tutaj:

            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

może być tak że ustawiasz `command` na 0, potem listener rzuca wyjątkiem, nic z nim nie robisz i zwracasz `command`, który jest... 0.

Ogólnie `except: pass` to nie jest dobry pomysł :) Przestań ignorować te wyjątki, to dowiedz się jaki jest prawdziwy problem. Albo przynajmniej nie próbuj używać wyniku tej funkcji jeśli wyjątek został rzucony.

komentarz 29 czerwca 2022 przez mvny Nowicjusz (120 p.)
edycja 29 czerwca 2022 przez mvny
Właśnie kiedy nie ma command = 0 wtedy wyrzuca wyjątek i pojawia się błąd w linijce return command, a tak udało mi się go uniknąć ;D Wcześniej przed przypisaniem zera do command dalej pojawiał się błąd w 48

Śmiga, zmieniłem po prostu command na "brak ingerencji na mikrofonie" i zapętla się bez błędów, tylko po jakimś czasie mocno spowalnia ^-^

Podobne pytania

0 głosów
1 odpowiedź 819 wizyt
pytanie zadane 8 grudnia 2020 w Python przez TEZRAX Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,306 wizyt
pytanie zadane 28 września 2017 w Python przez 0xf Dyskutant (8,180 p.)
0 głosów
0 odpowiedzi 240 wizyt

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...