Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 09.12.2019
Сообщений: 5

Отсчет времени от одной функции в другую

12.12.2022, 20:51. Показов 6138. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 функции в первой отсчитывается начальное время, во второй конечное время, также нужно во второй узнать потраченное время от начала до конечного. Примерно так:
def start(self):
self.start_time = datetime.now()
return f'Начало {self.name} положено.'


def pass_quest(self):
self.end_time = datetime.now()
completion_time = (self.start_time - self.end_time)
return f'Квест {self.name} окончен. Время выполнения квеста {completion_time}'

При попытке запустить код, терминал не видит одно из свойств и не может выполнить вычитание TypeError: unsupported operand type(s) for -: 'NoneType' and 'datetime.datetime'

Подскажите как исправить
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2022, 20:51
Ответы с готовыми решениями:

можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это...

Переместить запись из одной ячейки в другую по истечению времени
Привет всем!) Нужно написать код, который позволит перемещать запись из одной ячейки в другую, когда выйдет время / закончится день,...

Перевод чисел из одной системы в другую в режиме реального времени
Поступают данные как на (изображении 1), в формате заголовок-значение1-значение2-.......-значение6. Нужно написать программу. которая...

3
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
12.12.2022, 21:00
lashok, Может тебе проще записывать время старта не в самой функции, а до ее вызова? И время окончания не в самой функции, а после ее вызова в основном коде и тогда проблем не будет.

Добавлено через 3 минуты
Типа такого или сохраняй и храни время в атрибутах класса.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def start(self):
    self.start_time = datetime.now()
    return f'Начало {self.name} положено.'
 
 
def pass_quest(self):
    self.end_time = datetime.now()
    completion_time = (self.start_time - self.end_time)
    return f'Квест {self.name} окончен. Время выполнения квеста {completion_time}'
 
 
t1 = datetime.now()
Class.start()
"""
проходим квест
"""
t2 = datetime.now()
print(f'Квест {Class.name} окончен. Время выполнения квеста {t2-t1}')
0
0 / 0 / 0
Регистрация: 09.12.2019
Сообщений: 5
12.12.2022, 21:07  [ТС]
Alexarh, попробую

Добавлено через 6 минут
Это не то, попробую полную задачу предоставить, мне интересно именно задача со временем.
-------------------------------------------------------------------------------------------------------------------------
Добавьте в класс Quest два метода:
accept_quest() — чтобы игрок мог взять квест;
pass_quest() — чтобы игрок мог завершить квест.
Чтобы зафиксировать время начала и завершения квеста, в конструктор класса Quest добавьте свойства start_time и end_time. Определите их начальные значения как None.
В метод accept_quest() в свойство start_time запишите текущее время. Метод должен вернуть фразу 'Начало {название_квеста} положено.'
В метод pass_quest() в свойство end_time тоже запишите текущее время. Также в этом методе объявите переменную completion_time и посчитайте в ней разницу между временем завершения и начала квеста. Метод должен вернуть фразу 'Квест {название_квеста} окончен. Время выполнения квеста: {разница_между_началом_и_окончанием_квес та}'.
Также добавьте в оба метода ограничения:
Для accept_quest(): если при вызове метода для объекта класса в свойстве end_time уже записано значение, то нужно вернуть строку 'С этим испытанием вы уже справились.'. Игрок уже выполнил квест, вызвать его повторно нельзя.
Для pass_quest(): если при вызове метода у объекта квеста свойство start_time равно None, должна вернуться строка 'Нельзя завершить то, что не имеет начала!'. Нельзя завершить квест, который игрок не начал выполнять.
-------------------------------------------------------------------------------------------------------------------------
Вот как выглядит то на чем я остановился, я не понимаю как правильно вычесть время окончание квеста от начала квеста
from datetime import datetime

import time


class Quest:
def __init__(self, name, description, goal, start_time = None, end_time = None):
self.name = name
self.description = description
self.goal = goal
self.start_time = start_time
self.end_time = end_time

def accept_quest(self):
self.start_time = datetime.now()
return f'Начало {self.name} положено.'


def pass_quest(self):
self.end_time = datetime.now()
completion_time = (self.start_time - self.end_time)
return f'Квест {self.name} окончен. Время выполнения квеста {completion_time}'




quest_name = 'Сбор пиксельники'
quest_goal = 'Соберите 12 ягод пиксельники.'
quest_description = '''
В древнем лесу Кодоборье растёт ягода "пиксельника".
Она нужна для приготовления целебных снадобий.
Соберите 12 ягод пиксельники.'''

new_quest = Quest(quest_name, quest_description, quest_goal)

print(new_quest.pass_quest())
print(new_quest.accept_quest())
time.sleep(3)
print(new_quest.pass_quest())
print(new_quest.accept_quest())
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
12.12.2022, 21:16
Лучший ответ Сообщение было отмечено lashok как решение

Решение

37 строка, ты запускаешь сразу метод окончания квеста, Quest.start_time = None в этот момент.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from datetime import datetime
 
import time
 
 
class Quest:
 
    def __init__(self, name, description, goal, start_time = None, end_time = None):
        self.name = name
        self.description = description
        self.goal = goal
        self.start_time = start_time
        self.end_time = end_time
 
    def accept_quest(self):
        self.start_time = datetime.now()
        return f'Начало {self.name} положено.'
 
 
    def pass_quest(self):
        self.end_time = datetime.now()
        completion_time = (self.start_time - self.end_time)
        return f'Квест {self.name} окончен. Время выполнения квеста {completion_time}'
 
 
 
 
quest_name = 'Сбор пиксельники'
quest_goal = 'Соберите 12 ягод пиксельники.'
quest_description = '''
В древнем лесу Кодоборье растёт ягода "пиксельника".
Она нужна для приготовления целебных снадобий.
Соберите 12 ягод пиксельники.'''
 
new_quest = Quest(quest_name, quest_description, quest_goal)
 
print(new_quest.pass_quest())
print(new_quest.accept_quest())
time.sleep(3)
print(new_quest.pass_quest())
print(new_quest.accept_quest())
Добавлено через 1 минуту
Вот так надо было:
Python
1
2
3
4
5
6
7
new_quest = Quest(quest_name, quest_description, quest_goal)
 
print(new_quest.accept_quest())
print(new_quest.pass_quest())
time.sleep(3)
print(new_quest.accept_quest())
print(new_quest.pass_quest())
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2022, 21:16
Помогаю со студенческими работами здесь

Дублирование, передача значений из одной формы в другую в реальном времени
Здравствуйте уважаемые форумчане и специалисты программирования. Требуется гуру для помощи в решении задачи: :umnik::scratch::help: ...

Вывести на label обратный отсчёт времени до определенной даты и времени
Здравствуйте, необходимо вывести на lable обратный отсчёт от текущий даты до 05.09.2020 01:01, после это запустить отсчёт заново. ...

COMET чат и можно ли записывать данные c одной страницы на другую в реальном времени
В общем натолкнулся на пример из книжки, чат на основе EventSource соединения, но там я так понял нужна обработка еще php кодом или что то...

Перенос данных из одной таблицы в другую по нажатию кнопки с добавлением текущего времени в последней
Добрый день, нужно реализовать чтобы текущая запись в форме по нажатию кнопки добавлялась в таблицу (архив) с занесением в нее текущего...

Как передать переменную из одной функции в другую функции
Здравствует. Есть 2 функции function html_detail_result(&$data) { ob_start(); $vdata = &$data; $title = $vdata.'...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru