鱼C论坛

 找回密码
 立即注册
查看: 11499|回复: 121

[技术交流] Python:每日一题 4

[复制链接]
发表于 2017-3-25 22:29:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目输入某年某月某日,判断这一天是这一年的第几天?
程序分析以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天

欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@ooxx7788
点我上车

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-25 23:04:34 | 显示全部楼层
  1. def leapyear(n):
  2.     return True if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0 else False

  3. days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ]
  4. year, month, day = [int(x) for x in input('input year/month/day: ').split('/')]
  5. day2 = sum(days[:month - 1]) + day
  6. if leapyear(year) and month > 2:
  7.     day2 += 1
  8. print(day2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 4 反对 2

使用道具 举报

发表于 2017-3-25 23:27:40 From FishC Mobile | 显示全部楼层
datetime不是可以直接计算的?算两个日期间的差
import datetime as dt
print dt.datetime(2017,3,5)-dt.datetime(2016,12,31)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2017-3-26 07:34:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 07:35:44 | 显示全部楼层
jerryxjr1220 发表于 2017-3-25 23:27
datetime不是可以直接计算的?算两个日期间的差
import datetime as dt
print dt.datetime(2017,3,5)-dt. ...

不是的
是随便输入日期,判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 07:37:13 | 显示全部楼层
  1. year = int(input('year:'))
  2. month = int(input('month:'))
  3. day = int(input('day:'))
  4. months = (0,31,59,90,120,151,181,212,243,273,304,334)
  5. if 0 < month and month <= 12:
  6.     sum = months[month - 1]
  7. else:
  8.     print('亲,一年只有12个月!')
  9. sum += day
  10. l = 0
  11. if year % 4 == 0 or year % 400 == 0:
  12.     l = 1
  13. if l == 1 and month > 2:
  14.     sum += 1
  15. print('这是 %s 年的第 %s 天!' % (year,sum))
复制代码

我的解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 12:02:04 From FishC Mobile | 显示全部楼层
是随便输入日期啊,只要减前一年的12月31不就是当年的第几天?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2017-3-26 12:32:21 | 显示全部楼层
jerryxjr1220 发表于 2017-3-26 12:02
是随便输入日期啊,只要减前一年的12月31不就是当年的第几天?

大佬...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 12:55:39 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2017-3-26 12:32
大佬...

python的强大就在于有非常多好用的库,有现成的解决方案就不要重复造轮子了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 13:22:50 | 显示全部楼层
jerryxjr1220 发表于 2017-3-26 12:55
python的强大就在于有非常多好用的库,有现成的解决方案就不要重复造轮子了

学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-1 00:27:03 | 显示全部楼层
我只知道datetime能计算,但是不熟,查了半天,写了个:
  1. def test4(date):
  2.     '''日期的输入方式使用2017-4-1这样的'''
  3.     the_date = datetime.datetime.strptime(date,"%Y-%m-%d")
  4.     the_year = datetime.datetime.strftime(the_date,"%Y")
  5.     start_date = str(the_year)+"-1-1"
  6.     start_date = datetime.datetime.strptime(start_date,"%Y-%m-%d")
  7.     dates = the_date - start_date + datetime.timedelta(days=1)
  8.     print (dates)
复制代码


test4('2017-4-1')
>>>91 days, 0:00:00

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:06:39 | 显示全部楼层
,不用模板的话闰年要判断,填写的月份要判断,填写的日子又要判断,例如,填写的4月31号,四月没有31号想了好久。。感觉我写的好丑好长
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:08:33 | 显示全部楼层
  1. def ts(n=2017,y=4,r=11):
  2.     day=0
  3.     ey=29 if n%4==0 and n%100!=0 else 28
  4.     for i in range(1,y):
  5.         if i in[1,3,5,7,8,10,12]: day+=31
  6.         elif i==2:                day+=ey
  7.         else :                    day+=30
  8.     print('%d月%d号是%d年的第%d天'%(y,r,n,(day+r)))


  9. ts()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-17 21:20:48 | 显示全部楼层
year = int(input('year = '))
month = int(input('month = '))
day  = int(input('day = '))
today = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
if year % 4 == 0 or (year % 400 == 0 and year%100!=0):
     today[1] = 29
i = 0
d = 0
for i in range(month) :
     d = d + today[i]
     i = i + 1
print(d)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2017-4-19 11:13:10 | 显示全部楼层
本帖最后由 seasonjj 于 2017-4-19 11:32 编辑

day = str(input('输入年月日(列:20170419):'))
y = int(day[:4])
m = int(day[4:6])
d = int(day[6:8])
md = int(day[4:])
mlist = [0,31,28,31,30,31,30,31,31,30,31,30,31]
i = list(range(m))
days = 0

if y%400 == 0 or (y%4 == 0 and y%100 != 0):
    if md > 228:
        days = 1
    else:
        days = 0
    for each in i:
        days += mlist[each]
    days += d
    print(days)
else:
    for each in i:
        days += mlist[each]
    days += d
    print(days)


好臭好长的感觉

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 18:28:22 | 显示全部楼层
看起来大家的想法差别不大,基本编程还没学会,库什么的还是留后面吧,记得有这么回事就是了

  1. years = {'common_year': [31,28,31,30,31,30,31,31,30,31,30,31],\
  2.          'leap_year': [31,29,31,30,31,30,31,31,30,31,30,31]}
  3. judge = lambda y: 'leap_year' if ((y%4==0 and y%100 !=0) or y%400==0) else 'common_year'
  4. try:
  5.     year = int(input("请输入年份(正整数):"))   
  6.     month = int(input("请输入月份(正整数1-12):"))
  7.     day = int(input("请输入日期(正整数):"))
  8.     months = years[judge(year)] # 年份判断
  9.    
  10.     if year>=0 and 12>=month>0 and months[month-1]>=day>0:
  11.         num = sum(months[:month-1])+ day
  12.         print("这是%d年第 %d 天" %(year, num))
  13.     else:
  14.         print("输入超出合理范围,请重新输入")
  15.         
  16. except ValueError:
  17.     print("输入格式有误")
  18.    
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-5-23 22:49:47 | 显示全部楼层
本帖最后由 渡漫 于 2017-5-23 22:51 编辑
  1. year=int(input('输入年份:'))
  2. mouth=int(input('输入月份:'))
  3. day=int(input('输入日期:'))
  4. sumDay=0    #总天数即第几天
  5. isLeapYear=False   
  6. perDay=[0,31,28,31,30,31,30,31,31,30,31,30]     #以列表的方式存储每个月的天数
  7. if (year%4==0 and year%100!=0) or year%400==0:  #是否为闰年
  8.     isLeapYear=True     
  9. for i in range(mouth):      #以循环的方式叠加天数
  10.     sumDay+=perDay[i]
  11. if isLeapYear==True and mouth>2:
  12.     sumDay+=1
  13. sumDay+=day
  14. print('这是一年中的第{0}天'.format(sumDay))
复制代码

看了一下楼上的大佬,月份判断,日期判断。。。好烦,果然我还是太年轻了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 12:48:29 | 显示全部楼层
print("请输入某年某月某日")
a=int(input())
b=int(input())
c=int(input())
day = [0,31,59,90,120,151,181,212,243,273,304,334]
m=0
result=0
if((a%4==0 and a%100!=0) or a%400==0):
      m=1
for n in range(1,b):
      result=result+day[n]
result=result+m+c
print ('这是一年的第%d天' %result )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-30 21:01:41 | 显示全部楼层
代码多了点,但是排除了所有输入错误的情况,所有输入错的数值都要重新输入
  1. a = input ("please enter the year:")
  2. while a.isdigit()!= True:
  3.         a = input ("ERROR! Please enter the year again:")
  4. yy = int (a)
  5. if yy % 4 != 0:
  6.         r = 1
  7. elif (yy % 400 == 0) or (yy % 100 != 0):
  8.         r = 2
  9. elif yy % 100 == 0:
  10.         r = 1
  11. b = input ("please enter the month:")
  12. b1 = ['1','2','3','4','5','6','7','8','9','10','11','12']
  13. while b not in b1:
  14.     b = input ("ERROR! please enter the month again:")
  15. mm = int (b)
  16. if r == 1:
  17.     month = [31,28,31,30,31,30,31,31,30,31,30,31]
  18. else:
  19.     month = [31,29,31,30,31,30,31,31,30,31,30,31]
  20. day = month[mm-1]
  21. i = 1
  22. day1 = []
  23. while i<=day:
  24.     temp = str(i)
  25.     day1.append (temp)
  26.     i += 1
  27. c = input ("please enter the day:")
  28. while c not in day1:
  29.     c = input ("ERROR! please enter the day again:")
  30. dd = int (c)
  31. n = 0
  32. while mm != 1:
  33.     n += month[mm-2]
  34.     mm -= 1
  35. n += dd
  36. print (n)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 16:37:29 | 显示全部楼层
  1. def fuction1(a):
  2.     #该函数判断是否为闰年,是返回1,否则返回0.
  3.     if(a%4 ==0 and a%100 != 0) or a % 400 == 0:
  4.         return 1
  5.     return 0

  6. def fuction2(riqi):
  7.     #通过年月日计算第几天
  8.     runnian = fuction1(riqi[0])
  9.     if riqi[1] == 1:
  10.         return riqi[2]
  11.     elif riqi[1] == 2:
  12.         return 31 + riqi[2]
  13.     elif riqi[1] == 3:
  14.         return runnian + 59 + riqi[2]
  15.     elif riqi[1] == 4:
  16.         return runnian + 90 + riqi[2]
  17.     elif riqi[1] == 5:
  18.         return runnian + riqi[2] + 120
  19.     elif riqi[1] == 6:
  20.         return runnian + riqi[2] + 151
  21.     elif riqi[1] == 7:
  22.         return runnian + riqi[2] + 181
  23.     elif riqi[1] == 8:
  24.         return runnian + riqi[2] + 212
  25.     elif riqi[1] == 9:
  26.         return runnian + riqi[2] + 243
  27.     elif riqi[1] == 10:
  28.         return runnian + riqi[2] + 273
  29.     elif riqi[1] == 11:
  30.         return runnian + riqi[2] + 304
  31.     elif riqi[1] == 12:
  32.         return runnian + riqi[2] + 334

  33. def fuction3(riqi):
  34.     #用户输入年月日
  35.     riqi[0] = int(input('请输入年份,并按回车结束,输入0可结束程序'))
  36.     if riqi[0] != 0:
  37.         riqi[1] = int(input('再输入月份,并按回车结束'))
  38.         riqi[2] = int(input('最后输入几号,并按回车结束'))

  39. '''
  40. fuction3的测试程序
  41. riqi = [0,0,0,0]
  42. fuction3(riqi)
  43. print(riqi)
  44. '''


  45. riqi = [1,0,0,0]
  46. while riqi[0]:
  47.     fuction3(riqi)
  48.     if riqi[0] == 0:
  49.         break
  50.     riqi[3] = fuction2(riqi)
  51.     print('您输入的日期是该年的第',riqi[3],'天','\n')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 00:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表