鱼C论坛

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

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

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

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

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

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

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

本帖被以下淘专辑推荐:

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

使用道具 举报

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

days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ]
year, month, day = [int(x) for x in input('input year/month/day: ').split('/')]
day2 = sum(days[:month - 1]) + day
if leapyear(year) and month > 2:
    day2 += 1
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 | 显示全部楼层
year = int(input('year:'))
month = int(input('month:'))
day = int(input('day:'))
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 < month and month <= 12:
    sum = months[month - 1]
else:
    print('亲,一年只有12个月!')
sum += day
l = 0
if year % 4 == 0 or year % 400 == 0:
    l = 1
if l == 1 and month > 2:
    sum += 1
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能计算,但是不熟,查了半天,写了个:
def test4(date):
    '''日期的输入方式使用2017-4-1这样的'''
    the_date = datetime.datetime.strptime(date,"%Y-%m-%d")
    the_year = datetime.datetime.strftime(the_date,"%Y")
    start_date = str(the_year)+"-1-1"
    start_date = datetime.datetime.strptime(start_date,"%Y-%m-%d")
    dates = the_date - start_date + datetime.timedelta(days=1)
    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 | 显示全部楼层
def ts(n=2017,y=4,r=11):
    day=0
    ey=29 if n%4==0 and n%100!=0 else 28
    for i in range(1,y):
        if i in[1,3,5,7,8,10,12]: day+=31
        elif i==2:                day+=ey
        else :                    day+=30
    print('%d月%d号是%d年的第%d天'%(y,r,n,(day+r)))


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 | 显示全部楼层
看起来大家的想法差别不大,基本编程还没学会,库什么的还是留后面吧,记得有这么回事就是了
years = {'common_year': [31,28,31,30,31,30,31,31,30,31,30,31],\
         'leap_year': [31,29,31,30,31,30,31,31,30,31,30,31]}
judge = lambda y: 'leap_year' if ((y%4==0 and y%100 !=0) or y%400==0) else 'common_year'
try:
    year = int(input("请输入年份(正整数):"))   
    month = int(input("请输入月份(正整数1-12):"))
    day = int(input("请输入日期(正整数):"))
    months = years[judge(year)] # 年份判断
    
    if year>=0 and 12>=month>0 and months[month-1]>=day>0:
        num = sum(months[:month-1])+ day
        print("这是%d年第 %d 天" %(year, num))
    else:
        print("输入超出合理范围,请重新输入")
        
except ValueError:
    print("输入格式有误")
    

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-5-23 22:49:47 | 显示全部楼层
本帖最后由 渡漫 于 2017-5-23 22:51 编辑
year=int(input('输入年份:'))
mouth=int(input('输入月份:'))
day=int(input('输入日期:'))
sumDay=0    #总天数即第几天
isLeapYear=False    
perDay=[0,31,28,31,30,31,30,31,31,30,31,30]     #以列表的方式存储每个月的天数
if (year%4==0 and year%100!=0) or year%400==0:  #是否为闰年
    isLeapYear=True     
for i in range(mouth):      #以循环的方式叠加天数
    sumDay+=perDay[i]
if isLeapYear==True and mouth>2:
    sumDay+=1
sumDay+=day
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 | 显示全部楼层
代码多了点,但是排除了所有输入错误的情况,所有输入错的数值都要重新输入
a = input ("please enter the year:")
while a.isdigit()!= True:
        a = input ("ERROR! Please enter the year again:")
yy = int (a)
if yy % 4 != 0:
        r = 1
elif (yy % 400 == 0) or (yy % 100 != 0):
        r = 2
elif yy % 100 == 0:
        r = 1
b = input ("please enter the month:")
b1 = ['1','2','3','4','5','6','7','8','9','10','11','12']
while b not in b1:
    b = input ("ERROR! please enter the month again:")
mm = int (b)
if r == 1:
    month = [31,28,31,30,31,30,31,31,30,31,30,31]
else:
    month = [31,29,31,30,31,30,31,31,30,31,30,31]
day = month[mm-1]
i = 1
day1 = []
while i<=day:
    temp = str(i)
    day1.append (temp)
    i += 1
c = input ("please enter the day:")
while c not in day1:
    c = input ("ERROR! please enter the day again:")
dd = int (c)
n = 0
while mm != 1:
    n += month[mm-2]
    mm -= 1
n += dd
print (n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def fuction2(riqi):
    #通过年月日计算第几天
    runnian = fuction1(riqi[0])
    if riqi[1] == 1:
        return riqi[2]
    elif riqi[1] == 2:
        return 31 + riqi[2]
    elif riqi[1] == 3:
        return runnian + 59 + riqi[2]
    elif riqi[1] == 4:
        return runnian + 90 + riqi[2]
    elif riqi[1] == 5:
        return runnian + riqi[2] + 120
    elif riqi[1] == 6:
        return runnian + riqi[2] + 151
    elif riqi[1] == 7:
        return runnian + riqi[2] + 181
    elif riqi[1] == 8:
        return runnian + riqi[2] + 212
    elif riqi[1] == 9:
        return runnian + riqi[2] + 243
    elif riqi[1] == 10:
        return runnian + riqi[2] + 273
    elif riqi[1] == 11:
        return runnian + riqi[2] + 304
    elif riqi[1] == 12:
        return runnian + riqi[2] + 334

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

'''
fuction3的测试程序
riqi = [0,0,0,0]
fuction3(riqi)
print(riqi)
'''


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 14:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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