Djems
@Djems
Люблю программировать для себя и кататься на ролик

Как сделать лог выполнения кода? И сохранять в текстовом файле?

Есть простой код просит ввести пользователя логин, имя и т.д
На код можно особо не смотреть (я начинающий так что пока пишу так как могу)
c=input("Введите ник")
v=input("Введите ник")
d=print("20:00-20:10 @"+str()+a)
q=print("20:10-20:20 @"+str()+b)
w=print("20:20-20:30 @"+str()+c)
r=print("20:30-20:40 @"+str()+v)
t=print("20:40-20:50 @"+str()+a)
y=print("20:50-21:00 @"+str()+b)
u=print("21:00-21:10 @"+str()+c)
i=print("21:10-21:20 @"+str()+v)
o=print("21:20-21:30 @"+str()+a)
p=print("21:30-21:40 @"+str()+b)
s=print("21:40-21:50 @"+str()+c)
f=print("21:50-22:00 @"+str()+v)
g=print("22:00-22:10 @"+str()+a)
h=print("22:10-22:20 @"+str()+b)
j=print("22:20-22:30 @"+str()+c)
k=print("22:30-22:40 @"+str()+v)
l=print("22:40-22:50 @"+str()+a)
z=print("22:50-23:00 @"+str()+b)
x=print("23:00-23:10 @"+str()+c)
n=print("23:10-23:20 @"+str()+v)
m=print("23:20-23:30 @"+str()+a)
Q=print("23:30-23:40 @"+str()+b)
W=print("23:40-23:50 @"+str()+c)
D=print("23:50-00:00 @"+str()+v)
Итог выполнения после ввода пользователя
Введите никfdsf
Введите никdsf
Введите никdsf
Введите никdfs
20:00-20:10 @fdsf
20:10-20:20 @dsf
20:20-20:30 @dsf
20:30-20:40 @dfs
20:40-20:50 @fdsf
20:50-21:00 @dsf
21:00-21:10 @dsf
21:10-21:20 @dfs
21:20-21:30 @fdsf
21:30-21:40 @dsf
21:40-21:50 @dsf
21:50-22:00 @dfs
22:00-22:10 @fdsf
22:10-22:20 @dsf
22:20-22:30 @dsf
22:30-22:40 @dfs
22:40-22:50 @fdsf
22:50-23:00 @dsf
23:00-23:10 @dsf
23:10-23:20 @dfs
23:20-23:30 @fdsf
23:30-23:40 @dsf
23:40-23:50 @dsf
23:50-00:00 @dfs
Нужно это перенести в текстовый файл, который будет создаваться заранее при выполнении кода с окончательным результатом.
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Я тут по приколу заморочился:
Заморочка
import datetime
import itertools


class MyTimer:
    def __init__(self, first_time_in_datetime, delta=10, target_time_in_datetime=None):

        self.current = self.repair_first_time_type(_first_time=first_time_in_datetime)
        self.target_time_in_datetime = self.repair_target_time_type(_target_time=target_time_in_datetime)
        self.delta_in_minutes = delta
        self.zero = self.target_time_in_datetime < self.current

    def repair_first_time_type(self, _first_time):
        return self._repair_time_type(_first_time)

    def repair_target_time_type(self, _target_time):
        if _target_time is not None:
            return self._repair_time_type(time_data=_target_time)
        else:
            return datetime.time(23, 59)

    @staticmethod
    def _repair_time_type(time_data):
        result = datetime.time(20)
        if isinstance(time_data, datetime.time):
            result = time_data
        if isinstance(time_data, str) and ':' in time_data:
            try:
                _hour, _minute, *_ = time_data.split(':')
                result = datetime.time(int(_hour), int(_minute))
            except TypeError:
                print('Need ISO format time. Time set to 20:00:00')
            except ValueError:
                print('only numbers and :. Time set to 20:00:00')
        return result

    def _add_time(self, tm=None):
        if tm is None:
            tm = self.current
        fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
        fulldate = fulldate + datetime.timedelta(minutes=self.delta_in_minutes)
        return fulldate.time()

    def add_time(self):
        self.current = self._add_time()
        self.zero = self.zero and self.current > self.target_time_in_datetime

    @property
    def next(self):
        return self._add_time()

    @property
    def check(self):
        if not self.zero:
            return self.current >= self.target_time_in_datetime
        else:
            return self.current < self.target_time_in_datetime

    def __repr__(self):
        return self.current.isoformat(timespec='minutes')


def write_file_from_data(data, filename):
    with open(filename, 'wt') as target_file:
        target_file.write('\n'.join(data))


def make_names():
    return [input(f'введите {i}:') for i in 'abcv']


def make_data(_counter):
    result_data = []
    while not _counter.check:
        time_from, time_to = _counter, _counter.next.isoformat(timespec='minutes')
        result_string = f'{time_from}-{time_to} @{next(names)}'
        result_data.append(result_string)
        _counter.add_time()
    return result_data


if __name__ == '__main__':
    names = make_names()
    # names = ['aaa', 'bbb', 'ccc', 'ddd']
    names = itertools.cycle(names)

    result_filename = 'result.txt'

    first_time = '20:00'
    target_time = '00:00'
    delta_in_minutes = 10
    counter = MyTimer(first_time, delta_in_minutes, target_time)

    write_file_from_data(data=make_data(counter), filename=result_filename)

но это так... больные фантазии на тему... много лишнего, не уверен что все граничные варианты охватил, в общем накарябал.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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