Почему не работает функция?

Вчера начал изучать python и решил замутить простенького ассистента, который будет отвечать на вопросы по типу "сколько времени" и т.д.
Хочу, чтобы после ввода запроса и получения результата - "поисковик" оставался и ждал следующего запроса. Не особо шарю в этом, поэтому написал функцию в начале кода и написал название функции в нужном месте, но не работает)
Возможно, вопрос глупый, но не кидайтесь тапками, я нуб в пайтоне))

ссылка на исходный код:
https://pastebin.com/SUTX5T2c

# -*- coding: utf-8 -*-
import datetime
import colorama
from colorama import Fore, Back, Style
from colorama import init
init()

import time

date = datetime.datetime.today().strftime("%d.%m.%Y")
time = datetime.datetime.today().strftime("%H.%M")

def qstn():
	question = input("Введите запрос: ")
	if question == "Сколько сейчас времени?":
		print("Сейчас: " + str(time))
	elif question == "Какая сегодня дата?":
		print("Сегодня у нас: " + str(date))



login = input("Введите логин: ")

if login == "root":
	print(Fore.GREEN)	
	print('Авторизация пройдена на 50%!')

elif login == "":
	print(Fore.RED)	
	print("Поле пустое!")
	raise SystemExit

else:
	print(Fore.RED)
	print("Неверный логин!")
	raise SystemExit

password = input("Введите пароль: ")

if password == "abrakadabra":
	print(Fore.GREEN)
	print("Добро пожаловать!")
	print(Fore.WHITE)
	name = input("Как тебя зовут?: ")
	print("Приятно познакомиться, " + name +"! Я - Джессика! Твой ассистент.")
	question = input("Введите запрос: ")
	if question == "Сколько сейчас времени?":
		print("Сейчас: " + str(time))
	elif question == "Какая сегодня дата?":
		print("Сегодня у нас: " + str(date))

		qstn()


elif password == "":
	print(Fore.RED)	
	print("Поле пустое!")
	raise SystemExit

else:
	print(Fore.RED)
	print("Неверный пароль!")
	raise SystemExit

input()
  • Вопрос задан
  • 448 просмотров
Решения вопроса 1
@Kapustlo
Привет, предлагаю вот такой вариант решения задачи:

import datetime
import sys

from colorama import Fore, Back, Style, init

init()

def main():
	try:
		_, login, password = sys.argv
	except ValueError:
		login = password = ""

	if password != "abrakadabra" or login != "root":
		print(Fore.RED)
		print("Неверный логин или пароль!")
		exit()

	print(Fore.GREEN)
	print("Добро пожаловать!")
	print(Fore.WHITE)

	try:
		name = input("Как тебя зовут?: ")
		print("Приятно познакомиться, {}! Я - Джессика! Твой ассистент.".format(name))

		while True:
			question = input("Введите запрос: ")

			if question == "Сколько сейчас времени?":
				cur_time = datetime.datetime.today().strftime("%H.%M")
				print("Сейчас: " + str(cur_time))
			elif question == "Какая сегодня дата?":
				date = datetime.datetime.today().strftime("%d.%m.%Y")
				print("Сегодня у нас: " + str(date))
			else:
				print("Извините, я не могу понять ваш вопрос...")

	except KeyboardInterrupt:
		exit()

if __name__ == "__main__":
	main()


Немного по тому, что изменил: убрал часть с объявлением кодировки, так как в новых версиях Python utf-8 ставится по умолчанию, убрал из импорта модуль time, так как он не используется. Чтобы из модуля какого-то импортировать функции, не обязательно сначала сам модуль импортировать "colorama", можно сразу, как у меня. Переменную "time" переименовал в "cur_time", так как она могла конфликтовать в будущем с модулем "time" и занёс "date" и "cur_date" в цикл, так как в теории, если оставить на определённое время, то информация станет не актуальной. Убрал функцию "qstn", так как она нам дальше не понадобится, у нас будет цикл. Там будет есть моя "отсебятина", которая, как я считаю, прикольнее и улучшит взаимодействие с программой. Там есть строчка sys.argv. Ты, наверное, сталкивался, что в некоторых консольных утилитах ты можешь различные параметры передавать, так вот, они в python будут в этом списке храниться, в коде мы их и берём. Там можно сразу много строк кода убрать и сделать логин удобнее и быстрее для пользователя. Дальше проще, мы будем в цикле прогонять вопросы по мере их поступления, ловить комбинацию "ctr+c", которая ошибку будет выкидывать "KeyboardInterrupt" и просто выходить из программы, когда она попадётся. И ещё хотел одну ремарочку сделать, у тебя там в коде ошибки выбрасывались "SystemExit", так вот, на сколько я знаю, системные ошибки по типу этой или "KeyboardInterrupt" лучше самому не выкидывать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы