× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Hướng dẫn các bước tạo đồng hồ báo thức bằng ngôn ngữ Python

28/06/2021 01:49

Đồng hồ báo thức thường yêu cầu bạn đặt thời gian cụ thể mà bạn muốn báo thức đổ chuông. Khi bạn đã đặt thời gian mong muốn của mình, báo thức sẽ liên tục khớp với thời gian bạn đã cung cấp với thời gian hiện tại. Ngay sau khi cả hai thời gian khớp nhau, chuông báo thức đổ chuông. Đây là một ý tưởng rất chung chung về cách thức hoạt động của một chiếc đồng hồ báo thức thực. Trong bài viết này, chúng ta sẽ các bước để tạo đồng hồ báo thức bằng Python

Cài đặt các mô-đun thư viện bắt buộc để tạo đồng hồ báo thức bằng Python

Trong dự án này, chúng ta sẽ sử dụng một số mô-đun bên ngoài đã được tạo sẵn bởi các nhà phát triển khác. Các mô-đun này sẽ giúp chúng ta tiết kiệm rất nhiều thời gian và công sức. Tất cả những gì chúng ta phải làm là nhập chúng vào dự án của mình để bắt đầu.

Việc nhập các mô-đun khá đơn giản. Tất cả những gì bạn phải làm là chạy một lệnh pip install  đơn giản từ terminal và mô-đun được chỉ định sẽ được tải xuống trong hệ thống của chúng ta.

Chúng ta cần 2 mô-đun khác nhau cho dự án của mình - datetime & playsound.

Hãy chạy lệnh pip install và tải xuống cả hai mô-đun này.

pip install datetime

datetime - Chúng ta sẽ sử dụng mô-đun này để lấy thời gian hiện tại, ta sẽ không thể thực hiện được nếu không có mô-đun này.

pip install playsound

playsound - Chúng ta sẽ sử dụng mô-đun này để phát âm báo thức khi chuông báo thức đổ chuông.

Tải âm thanh cho đồng hồ báo thức của bạn

Một điều cuối cùng trước khi chúng ta bắt đầu dự án của mình, chúng ta phải tải xuống một bản nhạc chuông sẽ được phát khi chuông báo thức của chúng ta vang lên.

Bạn có thể tải xuống âm báo thức từ https://freetone.org/ringtones/melodies-alarms. Tất cả những gì bạn phải làm là đảm bảo rằng phần mở rộng tệp của tệp âm thanh là .wav. Một điều khác cần đảm bảo là cố gắng giữ tệp âm thanh trong cùng thư mục với mã của bạn.

>>> Tham khảo: Khóa học lập trình Python

Viết mã để tạo đồng hồ báo thức bằng Python

Nhập hai module mà chúng ta vừa cài đặt:

from datetime import datetime

from playsound import playsound

Xác định thời gian báo thức kêu:

alarm_time = input("Enter time in 'HH:MM:SS AM/PM' format: ")

Chúng ta cần có một định dạng được xác định trước, trong đó người dùng sẽ nhập thời gian. Ở đây chúng ta đang sử dụng định dạng thời gian tiêu chuẩn HH:MM:SS AM/PM yêu cầu Giờ, phút, giây và khoảng thời gian (AM / PM). Chúng ta sẽ lưu đầu vào này vào biến alarm_time.

Người dùng đôi khi có thể nhập sai định dạng thời gian, do đó lập trình viên phải đảm bảo họ cung cấp chính xác định dạng mà chúng ta yêu cầu. 

Để thực hiện việc này, chúng ta sẽ tạo một hàm thực hiện công việc xác thực thời gian do người dùng cung cấp, nếu định dạng thời gian không mong muốn hoặc không hợp lệ thì hàm của chúng ta sẽ hiển thị thông báo trên bảng điều khiển và sẽ yêu cầu người dùng nhập lại thời gian.

def validate_time(alarm_time):

    if len(alarm_time) != 11:

        return "Invalid time format! Please try again..."

    else:

        if int(alarm_time[0:2]) > 12:

            return "Invalid HOUR format! Please try again..."

        elif int(alarm_time[3:5]) > 59:

            return "Invalid MINUTE format! Please try again..."

        elif int(alarm_time[6:8]) > 59:

            return "Invalid SECOND format! Please try again..."

        else:

            return "ok"

>>> Đọc thêm: Iterator và Generator - Giải mã từ A - Z Iterator và Generator trong Python

Phân tích chi tiết chức năng báo thức

Chức năng báo thức của chúng ta được gọi validate_time. Cùng phân tích chi tiết về đoạn code này:

Hàm của chúng ta chấp nhận đầu vào của người dùng dưới dạng tham số là  alarm_time.

  • Trong câu lệnh if đầu tiên , len(alarm_time) != 11 chúng ta đang kiểm tra độ dài đầu vào của người dùng có chính xác là 11 ký tự hay không . Nếu không, nó sẽ xuất hiện một câu lệnh  return, yêu cầu người dùng nhập lại giá trị. Nếu thông tin đầu vào của người dùng dài chính xác 11 ký tự, thì khối else sẽ thực thi, đây là lúc xác thực chuyên sâu hơn đối với thông tin nhập của người dùng của chúng ta.
  • Trong câu lệnh if đầu tiên trong khối else , chúng ta đang xác thực hai ký tự đầu tiên của dữ liệu đầu vào của chúng ta HH. Tại đây alarm_time[0:2], chúng ta đang sử dụng toán tử cắt để truy cập hai ký tự đầu tiên của đầu vào của người dùng. Đầu vào không quá 12 giờ thì việc thực thi sẽ chuyển sang câu lệnh điều kiện tiếp theo. Nhưng nếu đầu vào quá 12 giờ, thì nó sẽ xuất hiện một câu lệnh return yêu cầu người dùng nhập lại thời gian.
  • Hai câu lệnh điều kiện tiếp theo thực hiện công việc tương tự như câu lệnh đầu tiên , so sánh phút và giây tương ứng.
  • Nếu đầu vào là tốt thì khối hàm else của chúng ta sẽ trả về một lệnh OK.

>>> Đọc thêm: Split trong Python - Hé lộ cách sử dụng hàm Split trong Python

Gọi hàm tạo báo thức trong Python

Sau khi chức năng này thành công, chúng ta sẽ gọi hàm:

while True:

    alarm_time = input("Enter time in 'HH:MM:SS AM/PM' format: ")

    validate = validate_time(alarm_time.lower())

    if validate != "ok":

        print(validate)

    else:

        print(f"Setting alarm for {alarm_time}...")

        break

Sau khi xác định đầu vào từ người dùng là chính xác, ta sẽ có thể lưu trữ riêng các giá trị vào các biến khác nhau. 

alarm_hour = alarm_time[0:2]

alarm_min = alarm_time[3:5]

alarm_sec = alarm_time[6:8]

alarm_period = alarm_time[9:].upper()

Tiếp theo, chúng ta phải lấy thời gian hiện tại để so sánh với thời gian do người dùng cung cấp.

now = datetime.now()

    current_hour = now.strftime("%I")

    current_min = now.strftime("%M")

    current_sec = now.strftime("%S")

    current_period = now.strftime("%p")

Bây giờ, đây là cơ chế chính của sự dối trá báo động của chúng ta. Chúng tôi chỉ đơn giản sử dụng câu lệnh if để so sánh thời gian hiện tại và thời gian của người dùng.

 

if alarm_period == current_period:

        if alarm_hour == current_hour:

            if alarm_min == current_min:

                if alarm_sec == current_sec:

                    print("Wake Up!")

                    playsound('D:/Library/Documents/Projects/Coding/Beginner Python Projects/Alarm Clock/alarm.wav')

Sau khi hoàn thành các bước này, nhớ thêm tất cả đoạn code vào một vòng lặp để nó tiếp tục thực thi khi báo thức của chúng ta đổ chuông:

while True:

    now = datetime.now()

    current_hour = now.strftime("%I")

    current_min = now.strftime("%M")

    current_sec = now.strftime("%S")

    current_period = now.strftime("%p")

    if alarm_period == current_period:

        if alarm_hour == current_hour:

            if alarm_min == current_min:

                if alarm_sec == current_sec:

                    print("Wake Up!")

                    playsound('D:/Library/Documents/Projects/Coding/Beginner Python Projects/Alarm Clock/alarm.wav')

                    break

>>> Tìm hiểu thêm các kiến thức về Python qua hệ thống blog tin tức tại  Viện công nghệ thông tin T3H.