1. 程式人生 > 其它 >Python基礎語法【第16關】時間記錄器

Python基礎語法【第16關】時間記錄器

我的設計:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
# time模組中的時間戳(可進行日期運算)和格式化日期(可將日期轉換成平常我們所見的格式);
# 倒計時的功能怎麼用print()函式實現,屬於之前沒有講過的方法,需要去搜索新的知識。
# 第一行:必不可少的呼叫模組。
import time
input("歡迎使用“時間管理器”!請按回車繼續。")
while True:
    task_name = input('請輸入任務名:')
    task_time = int(input('你覺得自己至少可以專注這個任務多少分鐘?輸入 N 分鐘'))
    input('此次任務資訊:\n我要完成的任務:%s\n我至少要專注:%d分鐘\n按回車開始專注:'%(task_name,task_time))
    # 下面應該要有兩行程式碼,自動記錄可以計算以及可以列印的開始時間。
    time_start = time.strftime('%Y/%m/%d %H:%M:%S')
    print('自動記錄開始時間為:{}'.format(time_start))
    # 這裡可以加一個倒計時,實時顯示還剩多少時間,可參考左側提供的資料。程式碼量大概有5行。
    task_time_s=task_time*60
    while task_time_s:
        print("離結束還剩{}秒".format(task_time_s))
        time.sleep(1)
        task_time_s-=1

    task_status = input('請在任務完成後按輸入y:')
    actual_time = input('該任務實際用時為幾分鐘?')
    if task_status == 'y':
        # 下面應該要有兩行程式碼,自動記錄可以計算以及可以列印的結束時間。
        # 有了自動記錄的始末時間後,記錄的程式碼也需要隨之改變。
        with open(r'D:\python\風變程式設計\第16關-哆啦A夢\timelog2.txt','a', encoding = 'utf-8') as f:
            f.write(task_name + ' 的預計時長為:' + str(task_time) + '分鐘\n')
            f.write(task_name + ' 的實際時長為:' + str(actual_time) + '分鐘\n')
        again = input('建立一個新任務請按 y, 退出時間日誌記錄器請按 q:')
        if again == 'q':
            break
    else:
        print('抱歉,你的輸入有誤。請重啟時間記錄器。')
print('願被你善待的時光,予你美好的回贈。')

參考答案:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2021/6/19 15:35
# @Author : name
# @File  : 時間記錄器參考答案.py
import time
input("歡迎使用“時間管理器”!請按回車繼續。")
while True:
    task_name = input('請輸入任務名:')
    task_time = int(input('你覺得自己至少可以專注這個任務多少分鐘?輸入 N 分鐘'))
    input('此次任務資訊:\n我要完成的任務:%s\n我至少要專注:%d分鐘\n按回車開始計時:' % (task_name, task_time))
    start = time.time()  # 開始計時
    start_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))  # 格式化日期
    # 實際程式碼:分鐘轉成秒要乘60,用-1來倒計時。
    for t in range(task_time*60, 0, -1):
        info = '請專注任務,還要保持專注 ' + str(t) + ' 秒哦!'
        print(info, end="")
        print("\b" * (len(info) * 2), end="", flush=True)
        time.sleep(1)
    print('你已經專注了 %d 分鐘,很棒~再加把勁,完成任務!' % task_time)  # 倒計時後,才繼續執行之後的程式碼。

    # 詢問任務是否完成
    task_status = input('請在任務完成後按輸入y:')
    if task_status == 'y':
        end = time.time()  # 一定使用者按了 y,就記下結束時間。
        end_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))  # 日期格式化
        actual_time = int((end - start) / 60)  # 始末時間相減,從秒換算到分,除以60。
        start_end = start_time + '——' + end_time + '\n'
        with open(r'D:\python\風變程式設計\第16關-哆啦A夢\timelog3.txt', 'a', encoding='utf-8') as f:
            f.write(task_name + ' 的預計時長為:' + str(task_time) + '分鐘\n')
            f.write(task_name + ' 的實際時長為:' + str(actual_time) + '分鐘,具體時間為:' + start_end)
        again = input('建立一個新任務請按 y, 退出時間日誌記錄器請按 q:')
        if again == 'q':
            break
    else:
        print('抱歉,你的輸入有誤。請重啟時間記錄器。')
print('願被你善待的時光,予你美好的回贈。')