Tính ngày tháng năm tiếp theo

Mọi người giúp em với ạ, yêu cầu là nhập ngày tháng năm và xuất ra ngày tháng năm của hôm sau. Nếu bỏ đi trước hợp là nhập quá số ngày, số tháng thì đoạn code này có sai hay thiếu đi trường hợp nào không ạ? Em cảm ơn

d = int(input())
m = int(input())
y = int(input())
if y % 4 == 0 and y % 100 == 0 or y % 400 == 0:
 if m == 2 and d == 28:
  d = 29
  m = 2
 elif m == 2 and d == 29:
  d = 1
  m = 3
 elif m == 2 and m != 28 and m != 29:
  d = d + 1
 elif m == 1 or m== 3 or m == 5 or m == 7 or m == 8 or m ==10:
  if d == 31:
   d = 1
   m = m + 1
  else:
   d = d + 1 
 elif m == 4 or m == 6 or m == 9 or m == 11:
  if d == 30: 
   d = 1
   m = m + 1 
  else:
   d = d + 1 
 elif m == 12:
  if d == 31:
   d = 1 
   m = 1 
   y = y + 1 
  else:
   d = d + 1
else:
 if m == 2:
  if m == 28:
   d = 1
   m = 3
  else:
   d = d + 1
 elif m == 1 or m== 3 or m == 5 or m == 7 or m == 8 or m ==10:
  if d == 31:
   d = 1
   m = m + 1
  else:
   d = d + 1 
 elif m == 4 or m == 6 or m == 9 or m == 11:
  if d == 30: 
   d = 1
   m = m + 1 
  else:
   d = d + 1 
 elif m == 12:
  if d == 31:
   d = 1 
   m = 1 
   y = y + 1 
  else:
   d = d + 1
print(d,m,y)

Bạn cho code vào giữa 2 dòng ``` nhé: Cách post Code dùng Markdown trong Category Programming

4 Likes

Bạn đang làm bài tập trên VNSigma đúng không?
Tham khảo nè:

def next_day(d, m, y):
  def is_leap_year():
    return (y % 4 == 0 and y % 100 != 0) or (y % 400 == 0)
  
  def days_of_month():
    months = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if is_leap_year():
      months[2] = 29
    return months[m]
  
  d = d + 1
  if d > days_of_month():
    d = 1
    m = m + 1
  if m > 12:
    m = 1
    y = y + 1
  return { 'd': d, 'm': m, 'y': y }

d = int(input())
m = int(input())
y = int(input())

next = next_day(d, m, y)
print(next['d'], next['m'], next['y'])
4 Likes

thật ra em nộp bài rồi em chỉ muốn hỏi là code của em sai gì thôi :smile:

cái em đang nói là cách kiểm tra dữ liệu nhập vào xem có đúng không.
Ví dụ:

  • Khi không nhập ngày tháng năm thì cần báo lỗi và yêu cầu nhập lại.
  • nhập ngày 30/02/2019 --> báo lỗi và yêu cầu nhập lại.
  • nhập ngày 0/0/0 --> báo lỗi và yêu cầu nhập lại.
3 Likes

dạ em thấy rồi em cảm ơn nhiều ạ

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