鱼C论坛

 找回密码
 立即注册
查看: 6475|回复: 65

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

[复制链接]
发表于 2018-1-4 08:57:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-1-9 19:31 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
有人问张三的生日,他说我的出生4位年数乘以月份乘以日期等于319907,你能知道他的出生的年月日吗?

===========================
实际上是希望大家求出三个质因数来得到结果的,但许多鱼油是用了循环来尝试的。大家还可以再试试分解质因数的方法。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-1-4 09:17:44 | 显示全部楼层
  1. from datetime import datetime, timedelta
  2. start = datetime(1900,1,1)
  3. d = timedelta(days=1)
  4. current = start+d
  5. while current.year*current.month*current.day!=319907:
  6.         current = current+d
  7. print(current.date())
复制代码

1987-07-23

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 10:20:04 | 显示全部楼层
def YMD():
    for D in range(1,31):
        for M in range(1,12):
            Y=319907/D/M
            if Y==int(Y) and Y>1900 and Y<2018:
                print("张三的生日是",int(Y),"年",M,"月",D,"日")
YMD()

结果:张三的生日是 1987 年 7 月 23 日

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 10:42:30 | 显示全部楼层
这样做?刚开始学没几天,会的不多,见谅!
for i in range(1900,2018):
        for n in range (1,13):
                for m in range(1,32):
                        k = i*n*m
                        if k == 319907:
                                print(i,n,m)

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 10:46:25 | 显示全部楼层
1987年 7月 23日
  1. for i in range(10000):
  2.     for j in range(13):
  3.         for k in range(32):
  4.             if i*j*k==319907:
  5.                 print(i,j,k)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 10:53:14 | 显示全部楼层
for l_year in range(1000,2018):
    for l_month in  range(1,12):
        for l_day in range(1,31):
            if l_year*l_month*l_day==319907:
                print(l_year,'年',l_month,'月',l_day,'日,乘积为319907')

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 10:53:23 | 显示全部楼层
  1. for i in range(1900, 2018):
  2.         for j in range(1, 13):
  3.                 for k in range(1, 32):
  4.                         if i*j*k == 319907:
  5.                                 print("出生年份为:" + str(i) + "年" + str(j) + "月" + str(k) + "日")
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 10:53:53 | 显示全部楼层
坐等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-4 11:05:56 From FishC Mobile | 显示全部楼层

用随机数来取

本帖最后由 tuple小白 于 2018-1-4 16:02 编辑

BaiduShurufa_2018-1-4_16-1-12.png 刚开始循环写错了 朋友指点了以下

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

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

使用道具 举报

发表于 2018-1-4 11:06:24 | 显示全部楼层
  1. for year in range[1000,2018,1]:
  2.      for month in range[0,12,1]:
  3.           for day in range[0,31,1]:                     
  4.                if(year*month*day==319907):
  5.                     print("year=",year,"month=",month,"day=",day)
  6.   
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 11:14:58 From FishC Mobile | 显示全部楼层
本帖最后由 tuple小白 于 2018-1-4 16:03 编辑

多了
*O_20180104_110442.jpg

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

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

使用道具 举报

发表于 2018-1-4 11:46:41 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-1-4 19:47 编辑
  1. for year in range(1000, 10000):
  2.     for month in range(1, 13):
  3.         for date in range(1, 32):
  4.             if year*month*date == 319907:
  5.                 print(year,'-',month,'-',date)
复制代码

  1. def isRunnian(year):
  2.     return year%400==0 or (year%4==0 and year%100 !=0)

  3. days1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  4. days2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

  5. for year in range(1000, 10000):
  6.     days = days1 if isRunnian(year) else days2
  7.     for month in range(1, 13):
  8.         for date in range(1, days[month-1]+1):
  9.             if year*month*date == 319907:
  10.                 print(year,'-',month,'-',date)

  11. #  1987 - 7 - 23
  12. #  总共也9000*12*31(近似)的数,对计算机来说不算个事,直接暴力破解就好了。
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 11:48:22 | 显示全部楼层
  1. import time

  2. date = []
  3. t1 = time.time()
  4. for year in range(10000):
  5.     for month in range(1,13):
  6.         if month in [1,3,5,7,8,10,12]:
  7.             for day in range(1,32):
  8.                 result = year * month * day
  9.                 if result == 319907:
  10.                     date.append([str(year) + str(month) + str(day),result])
  11.         elif month in [4,6,9,11]:
  12.             for day in range(1,31):
  13.                 result = year * month * day
  14.                 if result == 319907:
  15.                     date.append([str(year) + str(month) + str(day),result])
  16.         else:
  17.             if (year % 4) == 0 or (year % 100) == 0 or (year % 400) == 0:
  18.                 for day in range(1,30):
  19.                     result = year * month * day
  20.                     if result == 319907:
  21.                         date.append([str(year) + str(month) + str(day), result])
  22.             else:
  23.                 for day in range(1,29):
  24.                     result = year * month * day
  25.                     if result == 319907:
  26.                         date.append([str(year) + str(month) + str(day), result])
  27. t2 = time.time()
  28. print(t2 - t1)
  29. print(date)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 13:13:04 | 显示全部楼层
本帖最后由 罗文成 于 2018-1-5 17:49 编辑

新手,刚学一周,代码可能复杂冗余,希望高手优化一下
结果是:1987年7月23日

  1. num = 0
  2. for year in range(9999):
  3.     for month in range(12):

  4.         if year%4==0 and year%100!=0 or year%400:

  5.             if month ==1 or 3 or 5 or 7 or 8 or 10 or 12:  

  6.             
  7.                 for day in range(31):
  8.                     num=year*month*day
  9.                     if num==319907:
  10.                         print(year,month,day)
  11.             elif month == 4 or 6 or 9 or 11:
  12.                 for day in range(30):
  13.                     num=year*month*day
  14.                     if num==319907:
  15.                         print(year,month,day)
  16.             elif month == 2:
  17.                 for day in range(29):
  18.                     num=year*month*day
  19.                     if num==319907:
  20.                         print(year,month,day)
  21.         else:
  22.             if month ==1 or 3 or 5 or 7 or 8 or 10 or 12:

  23.             
  24.                 for day in range(31):
  25.                     num=year*month*day
  26.                     if num==319907:
  27.                         print(year,month,day)
  28.             elif month == 4 or 6 or 9 or 11:
  29.                 for day in range(30):
  30.                     num=year*month*day
  31.                     if num==319907:
  32.                         print(year,month,day)
  33.             elif month == 2:
  34.                 for day in range(28):
  35.                     num=year*month*day
  36.                     if num==319907:
  37.                         print(year,month,day)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 13:17:25 | 显示全部楼层
希望每天都可以有这样的题目练习,非常感谢楼主的贡献
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 13:37:24 | 显示全部楼层
这个要怎样编?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 14:03:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-4 15:29:47 | 显示全部楼层
1987年7月23日
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 16:59:51 | 显示全部楼层
  1. answer_1 = 319907
  2. month_year = {}
  3. month_day = {}
  4. day_dict = {}

  5. for day in range(1,32):
  6.     if answer_1 % day == 0:
  7.         a = int(answer_1 / day)
  8.         day_dict.setdefault(a,day)

  9. for month in range(1,13):
  10.     for i in list(day_dict.keys()):
  11.         if i % month == 0:
  12.             year = int(i / month)
  13.             if (year >= 1000) and (year <= 2018):
  14.                 month_year.setdefault(month,year)
  15.                 ri = day_dict[i]
  16.                 month_day.setdefault(month,ri)

  17. if 2 in month_day :
  18.     if month_day[2] > 29:
  19.         del month_day[2]
  20.         del month_year[2]
  21.     if month_day[2] == 28:
  22.         if (month_year[2] % 4 != 0) or (month_year[2] % 400 != 0):
  23.             del month_day[2]
  24.             del month_year[2]

  25. if len(month_day) == 0:
  26.     print('张三的回答有问题,并未求出结果')
  27. else :
  28.     x = list(month_year.values())
  29.     y = list(month_year.keys())
  30.     z = list(month_day.values())

  31.     for j in range(0,len(month_year)):
  32.         print('张三可能生于%s年%s月%s日'%(x[j],y[j],z[j]))
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-1-4 18:23:54 | 显示全部楼层
  1. for a in range(1900,2017):
  2.                 for b in range(1,12):
  3.                         for c in range(1,31):
  4.                                 if a*b*c==319907:
  5.                                         print(a,b,c)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 06:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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