fengjianyx 发表于 2022-3-19 21:32:23

新人每日一问,求某个日期是该年的第几天

本帖最后由 fengjianyx 于 2022-3-20 19:23 编辑

新人初学,尝试练习基础代码:

for语句理解不透彻,导致方案一的错误,
求各位大佬讲解一下,具体应该怎么去考虑for循环后的输出值对齐?
代码如下:方案一结果错的,方案二调整print缩进就好了


【题目】计算某个日期是这一年的第几天,


【方案一】运行到最后结果是多行的
#判断日期是第几天
str1 = str(input("请输入一个日期,格式为2020/12/22\n"))
year =int(str1)
month = int(str1)
day   = int(str1)
#定义月份的天数
list=
#先判断是否平年闰年,用于判断2月份天数
if (year % 4) == 0 and (year % 100) != 0 or (year % 400) == 0:
    list = 29
else:
    list = 28
#for语句控制月份的循环
for i in range(1,month):
    if month == 1:
      print(day)
      break
    day+=list #
    print(day)


结果为:
请输入一个日期,格式为2020/12/22
2022.12.31
59
90
120
151
181
212
243
273
304
334
365




【方案二】经过调整print对齐至for后又正常如下:

#判断日期是第几天
str1 = str(input("请输入一个日期,格式为2020/12/22\n"))
year =int(str1)
month = int(str1)
day   = int(str1)
#定义月份的天数
list=
#先判断是否平年闰年,用于判断2月份天数
if (year % 4) == 0 and (year % 100) != 0 or (year % 400) == 0:
    list = 29
else:
    list = 28
#for语句控制月份的循环
for i in range(1,month):
    if month == 1:
      print(day)
      break
    day+=list #
print (str1,"是{}年的第{}天".format(year,day))



结果准确了:
请输入一个日期,格式为2020/12/22
2022.12.31 是2022年的第365天

大马强 发表于 2022-3-19 22:41:52

1、列表的下标从0开始,你range(1,month)就直接把一月给跳了
2、range应该是 month-1, 如果month = 2 时,按照你原来的那就是 0 1 =》 1月和二月,多了一个月
输出来的结果就不对了

2022/12/31
2022/12/31 是2022年的第365天

2022/02/01
2022/02/01 是2022年的第32天


# 判断日期是第几天
str1 = str(input("请输入一个日期,格式为2020/12/22\n"))
year = int(str1)
month = int(str1)
day = int(str1)
# 定义月份的天数
list =
# 先判断是否平年闰年,用于判断2月份天数
if (year % 4) == 0 and (year % 100) != 0 or (year % 400) == 0:
    list = 29
else:
    list = 28
# for语句控制月份的循环
for i in range(0, month-1):#
    if month == 1:
      print(day)
      break
    day += list
print(str1, "是{}年的第{}天".format(year, day))

songwentao 发表于 2022-3-20 09:07:27

后面for循环的range的mouth应该是mouth-1

甲鱼python 发表于 2022-3-21 17:20:00

你把输出放入循环内 当然就会输出很多结果 你只需要最后的结果 输出放到循环外就可以了

甲鱼python 发表于 2022-3-21 17:44:49

#判断日期是第几天
str1 = str(input("请输入一个日期,格式为xxxx/xx/xx\n"))
year =int(str1)
month = int(str1)
day = int(str1)
while True:
    if (month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12) and day > 31:
      str1 = str(input("请输入一个正确的日期,格式为xxxx/xx/xx\n"))
      year =int(str1)
      month = int(str1)
      day = int(str1)
    elif (month == 4 or month == 6 or month == 9 or month == 11) and day > 30:
      str1 = str(input("请输入一个正确的日期,格式为xxxx/xx/xx\n"))
      year =int(str1)
      month = int(str1)
      day = int(str1)
    elif month == 2:
      if ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0) and day > 29:
            str1 = str(input("请输入一个正确的日期,格式为xxxx/xx/xx\n"))
            year =int(str1)
            month = int(str1)
            day = int(str1)
      elif year % 4 != 0 and day > 28:
            str1 = str(input("请输入一个正确的日期,格式为xxxx/xx/xx\n"))
            year =int(str1)
            month = int(str1)
            day = int(str1)
      else:
            break
    else:
      break
#定义月份的天数
list1=
#先判断是否平年闰年,用于判断2月份天数
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    list1 = 29
#for语句控制月份的循环
for i in range(0, month-1):
    day+=list1
print (str1,"是{}年的第{}天".format(year,day))
页: [1]
查看完整版本: 新人每日一问,求某个日期是该年的第几天