Bài tập Python tìm ngày tháng năm kế tiếp

a/c/b giúp em làm bài này vs ạ! Em cảm ơn.
Nhập ngày d tháng m năm y. Cho biết ngày kế tiếp.
VD: Nhập d = 31, m = 3, y = 2021 thì ngày kế tiếp là ngày 1/4/2021

DNH không cho phép hỏi bài mà không suy nghĩ. Bạn đã nghĩ được gì rồi?

2 Likes

Cho 1 ngày cụ thể, thì tính ngày kế tiếp thôi.
Tuy nhiên có ngoại lệ là nặm nhuận, vì khi đó số ngày sẽ khác.

Vậy thì điểm chính của bài toán là tìm năm nhuận (toán lớp 4), còn tính ngày tiếp theo chỉ là phụ thôi.

2 Likes

Để tìm ngày kế tiếp của một ngày cụ thể, chúng ta cần phải biết được số ngày trong tháng đó. Sau đó, ta sẽ tăng giá trị ngày lên 1 đơn vị và kiểm tra xem ngày đó có hợp lệ hay không.

Các bước cụ thể như sau:

  1. Xác định số ngày trong tháng:
  • Nếu tháng là tháng 1, 3, 5, 7, 8, 10 hoặc 12 thì có 31 ngày.
  • Nếu tháng là tháng 4, 6, 9 hoặc 11 thì có 30 ngày.
  • Nếu tháng là tháng 2 và năm không phải là năm nhuận thì có 28 ngày.
  • Nếu tháng là tháng 2 và năm là năm nhuận thì có 29 ngày.
  1. Tăng giá trị ngày lên 1 đơn vị.
  2. Kiểm tra xem ngày đó có hợp lệ hay không:
  • Nếu ngày đó nhỏ hơn hoặc bằng số ngày trong tháng thì đó là ngày kế tiếp.
  • Nếu ngày đó lớn hơn số ngày trong tháng thì ta cần chuyển sang tháng tiếp theo. Nếu đó là tháng 12, ta cần chuyển sang năm tiếp theo và tháng bắt đầu từ 1. Ta sẽ tiếp tục lặp lại các bước trên cho ngày đầu tiên của tháng tiếp theo.

Ví dụ: Nhập ngày 20 tháng 3 năm 2023.

  1. Tháng 3 có 31 ngày.
  2. Tăng giá trị ngày lên 1 đơn vị: ngày 20 -> ngày 21.
  3. Ngày 21 nhỏ hơn hoặc bằng 31, vậy ngày kế tiếp là ngày 21 tháng 3 năm 2023.

Ví dụ khác: Nhập ngày 28 tháng 2 năm 2024.

  1. Tháng 2 năm 2024 là năm nhuận, nên có 29 ngày.
  2. Tăng giá trị ngày lên 1 đơn vị: ngày 28 -> ngày 29.
  3. Ngày 29 nhỏ hơn hoặc bằng 29, vậy ngày kế tiếp là ngày 29 tháng 2 năm 2024.
def is_leap_year(year):
    """
    Kiểm tra năm có phải là năm nhuận hay không.
    """
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

def next_day(day, month, year):
    """
    Tìm ngày kế tiếp của một ngày cụ thể.
    """
    days_in_month = [31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    day += 1

    if day > days_in_month[month - 1]:
        day = 1
        month += 1

        if month > 12:
            month = 1
            year += 1

    return day, month, year

# Nhập ngày d, tháng m và năm y
d = int(input("Nhập ngày: "))
m = int(input("Nhập tháng: "))
y = int(input("Nhập năm: "))

# Tìm ngày kế tiếp
next_d, next_m, next_y = next_day(d, m, y)

# In kết quả
print("Ngày kế tiếp là: {}/{}/{}".format(next_d, next_m, next_y))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?