• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
357 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 Mentor (350,440 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ź 940 wizyt
pytanie zadane 8 grudnia 2020 w Python przez TEZRAX Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,365 wizyt
pytanie zadane 28 września 2017 w Python przez 0xf Dyskutant (8,180 p.)
0 głosów
0 odpowiedzi 266 wizyt

93,164 zapytań

142,175 odpowiedzi

321,925 komentarzy

62,491 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 453p. - Marcin Putra
  2. 453p. - dia-Chann
  3. 447p. - Łukasz Piwowar
  4. 443p. - CC PL
  5. 431p. - Łukasz Eckert
  6. 428p. - rafalszastok
  7. 423p. - Michal Drewniak
  8. 423p. - Adrian Wieprzkowicz
  9. 418p. - rucin93
  10. 415p. - Mikbac
  11. 410p. - Piotr Aleksandrowicz
  12. 408p. - ksalekk
  13. 402p. - Mariusz Fornal
  14. 401p. - Dawid128
  15. 392p. - ikarek-one
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...