鱼C论坛

 找回密码
 立即注册
楼主: ooxx7788

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

[复制链接]
发表于 2017-5-6 18:41:04 | 显示全部楼层
ooxx7788 发表于 2017-5-6 17:36
和小数较劲干什么哦,转乘字符串,直接替换掉小数点不就行了嘛!

因为还有补0的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-6 18:54:37 | 显示全部楼层
冬雪雪冬 发表于 2017-5-6 18:23
程序写的比较乱,是边写边改的。上边的测试都通过了,不知还有没有bug。

1000条随机测试是通过的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-6 18:56:31 | 显示全部楼层

你这个不是函数形式,没有办法给你测了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 19:13:18 | 显示全部楼层
ooxx7788 发表于 2017-5-6 18:56
你这个不是函数形式,没有办法给你测了。
  1. import re
  2. import itertools
  3. def late_clock(test):
  4.     b = [('','')]
  5.     test = [str(i) for i in test]
  6.     for i in itertools.permutations(test,4):
  7.         i = ''.join(i)
  8.         a = re.compile(r'([0-1][0-9]|2[0-3])([0-5][0-9])')
  9.         if re.findall(a,i):
  10.             if re.findall(a,i) [0][0]>=b[0][0] and re.findall(a,i) [0][1]>=b[0][1]:
  11.                 b = re.findall(a,i)
  12.     if b != [('','')]:
  13.         return '%s:%s' % (b[0][0],b[0][1])
  14.     else :
  15.         return  ''
复制代码

改好了,也是用正则表达式,不过答案里的比我的更好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-6 19:17:34 | 显示全部楼层
小锟 发表于 2017-5-6 19:13
改好了,也是用正则表达式,不过答案里的比我的更好

'20:22' should equal '22:20'

不能通过哦,2220
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 19:38:22 | 显示全部楼层
ooxx7788 发表于 2017-5-6 19:17
'20:22' should equal '22:20'

不能通过哦,2220
  1. import re
  2. import itertools
  3. def late_clock(test):
  4.     b = [('','')]
  5.     test = [str(i) for i in test]
  6.     for i in itertools.permutations(test,4):
  7.         i = ''.join(i)
  8.         a = re.compile(r'([0-1][0-9]|2[0-3])([0-5][0-9])')
  9.         if re.findall(a,i):
  10.             if re.findall(a,i) [0][0]>b[0][0] :
  11.                 b = re.findall(a,i)
  12.             elif re.findall(a,i) [0][0]==b[0][0] and re.findall(a,i) [0][1]>b[0][1]:
  13.                 b = re.findall(a,i)
  14.     if b != [('','')]:
  15.         return '%s:%s' % (b[0][0],b[0][1])
  16.     else :
  17.         return  ''
  18.    
复制代码


条件判断没有考虑到所有的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-6 19:41:39 | 显示全部楼层
小锟 发表于 2017-5-6 19:38
条件判断没有考虑到所有的结果

You have passed all of the tests! :)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 20:25:03 | 显示全部楼层
  1. def late_clock(para):
  2.     temp = para.copy()
  3.     hours = 0
  4.     minutes = 0
  5.     if 2 in temp:
  6.         hours += temp.pop(temp.index(2))*10
  7.         if 3 in temp:
  8.             hours += temp.pop(temp.index(3))
  9.         elif 2 in temp:
  10.             hours += temp.pop(temp.index(2))
  11.         elif 1 in temp:
  12.             hours += temp.pop(temp.index(1))
  13.         elif 0 in temp:
  14.             hours += temp.pop(temp.index(0))
  15.     elif 1 in temp:
  16.         hours += temp.pop(temp.index(1))*10
  17.         hours += temp.pop(temp.index(max(temp)))
  18.     elif 0 in temp:
  19.         temp.pop(temp.index(0))
  20.         hours += temp.pop(temp.index(max(temp)))
  21.     if 5 in temp:
  22.         minutes += temp.pop(temp.index(5))*10
  23.         minutes += temp.pop()
  24.     elif 4 in temp:
  25.         minutes += temp.pop(temp.index(4))*10
  26.         minutes += temp.pop()
  27.     elif 3 in temp:
  28.         minutes += temp.pop(temp.index(3))*10
  29.         minutes += temp.pop()
  30.     elif 2 in temp:
  31.         minutes += temp.pop(temp.index(2))*10
  32.         minutes += temp.pop()
  33.     elif 1 in temp:
  34.         minutes += temp.pop(temp.index(1))*10
  35.         minutes += temp.pop()
  36.     elif 0 in temp:
  37.         temp.pop(temp.index(0))
  38.         minutes += temp.pop()
  39.     else:
  40.         return ''
  41.     return str.format('%d:%d' %(hours, minutes))
复制代码

想法是直接找出最大值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-6 20:26:38 | 显示全部楼层
lumber2388779 发表于 2017-5-6 20:25
想法是直接找出最大值


'' should equal '19:28'

你以为你这样就过得去了吗?

我递归就是按照你这个思路来的哦,就死在这个数上咯!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 20:52:00 | 显示全部楼层
我想问:有24:00吗?如果没有,那么00:00大还是小?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-6 20:56:03 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-5-6 20:58 编辑
当回首遇上转身 发表于 2017-5-6 20:52
我想问:有24:00吗?如果没有,那么00:00大还是小?


肯定是24:00晚啊。24:00也只是可以无限接近的值。所以,你即使输入2,4,0,0四个数,出来的结果也只会是20:40
而且你说的这个问题不会出现,因为不会出现这个值的比较。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 20:59:41 | 显示全部楼层
本帖最后由 当回首遇上转身 于 2017-5-6 21:01 编辑
ooxx7788 发表于 2017-5-6 20:56
肯定是24:00晚啊。24:00也只是可以无限接近的值。
而且你说的这个问题不会出现,因为不会出现这个值 ...


你没有理解我意思。。。
有些题只有00:00~23:59
而有些题目会包含无限接近下一个00:00的值也就是24:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 22:17:13 | 显示全部楼层
天啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-6 22:37:11 | 显示全部楼层
ooxx7788 发表于 2017-5-6 20:26
'' should equal '19:28'

你以为你这样就过得去了吗?
  1. def late_clock(para):
  2.     listhour = []
  3.     listminute = []
  4.     listtime = []
  5.     temphour = 0
  6.     tempminute = 0
  7.     maxhour = 0
  8.     maxminute = 0
  9.     for i in range(4):
  10.         listtemp = para.copy()
  11.         temphour += listtemp[i]*10
  12.         listtemp.pop(i)
  13.         for j in range(3):
  14.             listtemp1 = listtemp.copy()
  15.             temphour += listtemp1[j]
  16.             listtemp1.pop(j)
  17.             for k in range(2):
  18.                 listtemp2 = listtemp1.copy()
  19.                 tempminute += listtemp2[k]*10
  20.                 listtemp2.pop(k)
  21.                 tempminute += listtemp2[0]
  22.                 listhour.append(temphour)
  23.                 listminute.append(tempminute)
  24.                 tempminute = 0
  25.             temphour = temphour//10*10
  26.         temphour = 0
  27.     for i in range(len(listhour)):
  28.         if listhour[i]<24 and listminute[i]<60:
  29.             if listhour[i] > maxhour:
  30.                 maxhour = listhour[i]
  31.                 maxminute = listminute[i]
  32.             elif listminute[i] > maxminute and listhour[i] == maxhour:
  33.                 maxminute = listminute[i]
  34.     if maxhour == 0 and maxminute == 0:
  35.         return ''
  36.     else:
  37.         return str.format('%d:%d' %(maxhour, maxminute))
复制代码

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

使用道具 举报

 楼主| 发表于 2017-5-6 23:22:22 | 显示全部楼层

'11:0' should equal '11:00'

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

使用道具 举报

发表于 2017-5-7 01:21:49 | 显示全部楼层
ooxx7788 发表于 2017-5-6 23:22
'11:0' should equal '11:00'

继续订正!
  1. return str.format('%d:%d' %(maxhour, maxminute))
复制代码

改为
  1. return str.format('%02d:%02d' %(hours, minutes))
复制代码

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

使用道具 举报

 楼主| 发表于 2017-5-7 01:40:14 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-5-7 01:41 编辑


'' should equal '00:00'
0并不代表无效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-7 03:16:09 | 显示全部楼层
本帖最后由 当回首遇上转身 于 2017-5-7 04:50 编辑

我终于搞定了。。。

  1. from itertools import permutations
  2. from datetime import time
  3. while 1:
  4.     shuru = input()
  5.     times = []
  6.     for each in permutations(shuru):
  7.         hours = int(each[0]) * 10 + int(each[1])
  8.         minutes = int(each[2]) * 10 + int(each[3])
  9.         if hours >= 24 or minutes >= 60:
  10.             continue  
  11.         times.append(time(hours, minutes))
  12.     if times == []:
  13.         print("latest_clock is:' '")
  14.     else:
  15.             latest_hour =  str(max(times).hour).zfill(2)
  16.             latest_minute = str(max(times).minute).zfill(2)
  17.             print('latest_clock is:%s:%s'%(latest_hour,latest_minute))

复制代码

用的组合跟时间模块
还有最坑爹的.zfill()

满满的调试(注意右边进度条)

360截图20170507031346065.jpg

最终版本

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

使用道具 举报

发表于 2017-5-7 04:51:39 | 显示全部楼层
小锟 发表于 2017-5-6 19:38
条件判断没有考虑到所有的结果

正则我还没学。。。学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 10:31:10 | 显示全部楼层
本帖最后由 余欲渔 于 2017-5-10 10:37 编辑
  1. import itertools as it
  2. def sc(x=[1,2,3,4]):
  3.     bx=[]
  4.     for i in it.permutations(x):
  5.         bx.append(i)
  6.     bx.sort(reverse=True)
  7.     l=len(bx)
  8.     for i in range(l):
  9.         if bx[i][0]*10+bx[i][1]>23:continue
  10.         if bx[i][2]*10+bx[i][3]>59:continue
  11.         return str(bx[i][0])+str(bx[i][1])+':'+str(bx[i][2])+str(bx[i][3])
  12.     return ''
  13. print(sc([0,0,0,1]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 20:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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