@ilyageekdays

В чём ошибка кода?

import speech_recognition as sr
import pyttsx3
import sys
import webbrowser
import pyttsx3
import os


engine = pyttsx3.init()
def talk(words):
	engine.say(words)
	engine.runAndWait()

talk("Добрый день я голосовой ассистент Харитон.")
print("Добрый день я голосовой ассистент Харитон.",'\n')


def command():
	r = sr.Recognizer()

	with sr.Microphone() as source:
		r.pause_threshold = 1
		r.adjust_for_ambient_noise(source, duration=1)
		audio = r.listen(source)

	try:
			zadanie = r.recognize_google(audio, language="ru-RU").lower()
			print("Вы сказали: " + zadanie)
	except sr.UnknownValueError:
		talk("Извеняюсь!Я вас не понял")
		print("Извеняюсь!Я вас не понял",'\n')
		zadanie = command()

	return zadanie

def Vipolneniye(zadanie):
	
	if 'открой ютуб' in zadanie or 'open youtube' in zadanie or 'открой youtube' in zadanie:
		talk("Уже открываю")
		print("Уже открываю",'\n')
		url = 'https://www.youtube.com/'
		webbrowser.open(url)
	else:
		with open('C:/Users/Home/Desktop/test.txt','r') as f:
			zadaniepoisk = ('a',zadanie,'a')
			counter = 1
			for line in f:
				if zadaniepoisk in line:
					print(counter)
					break
				counter += 1
while True:
	Vipolneniye(command())


Ошибка:
if zadaniepoisk in line:
TypeError: 'in ' requires string as left operand, not tuple
  • Вопрос задан
  • 278 просмотров
Решения вопроса 2
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Для начала вам нужно прочитать файл, перед тем как итерировать его строки, делается это с read_file = f.read().split('\n')
На счет ошибки:
Вы пытаетесь сравнить кортеж и строку - так нельзя, нужно сравнивать одинаковые типы данных, т.е. в вашем случае строку и строку. Вот это zadaniepoisk = ('a',zadanie,'a') - кортеж, а вот так zadaniepoisk = 'a' + zadanie + 'a' - строка.
with open('C:/Users/Home/Desktop/test.txt','r') as f:
    read_file = f.read().split('\n')
    zadaniepoisk = 'a' + zadanie + 'a'
    counter = 1
    for line in read_file:
        if zadaniepoisk in line:
            print(counter)
            break
        counter += 1
Ответ написан
zadaniepoisk - это кортеж, а line это строка. Ты пытаешься проверить вхождение кортежа в строку
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы