鱼C论坛

 找回密码
 立即注册
查看: 1338|回复: 5

[已解决]字符串的分割问题

[复制链接]
发表于 2017-7-19 11:49:13 | 显示全部楼层 |阅读模式

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

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

x
日期字符串的构造函数:设计一个以西文减号分隔的字符串构造函数TDate(string dateStr)。例如,参数字符串可以为“2015-06-19”、“2015-6-19”、“2015-1-1”和“2015-10-1”等。其中,“6”和“06”均是有效的月份。

测试:
测试函数和数据        验证函数与结果
TDate(null)        Output()输出结果:错误信息
TDate(“”)        Output()输出结果:错误信息
TDate(“2015”)        Output()输出结果:错误信息
TDate(“201506”)        Output()输出结果:错误信息
TDate(“20150620”)        Output()输出结果:错误信息
TDate(“-”)        Output()输出结果:错误信息
TDate(“1-1”)        Output()输出结果:错误信息
TDate(“-1”)        Output()输出结果:错误信息
TDate(“1-”)        Output()输出结果:错误信息
TDate(“--”)        Output()输出结果:错误信息
TDate(“-1-”)        Output()输出结果:错误信息
TDate(“-1-1”);        Output()输出结果:错误信息
TDate(“1-1-”)        Output()输出结果:错误信息
TDate(“1--1”)        Output()输出结果:错误信息
TDate(“--1”)        Output()输出结果:错误信息
TDate(“1--”)        Output()输出结果:错误信息
TDate(“1-1-1-”)        Output()输出结果:错误信息
TDate(“-1-1-1”)        Output()输出结果:错误信息
TDate(“10000-1-1”)        Output()输出结果:错误信息
TDate(“9999-0-1”)        Output()输出结果:错误信息
TDate(“1-1-0”)        Output()输出结果:错误信息
TDate(“9999-13-1”)        Output()输出结果:错误信息
TDate(“1-1-32”)        Output()输出结果:错误信息
TDate(“1000-2-29”)        Output()输出结果:错误信息
TDate(“2012-2-29”)        Output()输出结果:2012-02-29
TDate(“1-1-1”)        Output()输出结果:1-01-01
TDate(“02-02-02”)        Output()输出结果:2-02-02
TDate(“9999-12-31”)        Output()输出结果:9999-12-31
TDate(“9999-1-1”)        Output()输出结果:9999-1-1,应该是9999-01-01
TDate(“9999-12-1”)        Output()输出结果:9999-12-1,应该是9999-12-01
TDate(“9999-1-31”)        Output()输出结果:9999-1-31,应该是9999-01-31
TDate(“201a-1a-b3”)        Output()输出结果:错误信息
TDate(“ 2015-12-5”)        Output()输出结果:错误信息
TDate(“2015-12 -5”)        Output()输出结果:错误信息
TDate(“2015-12- 5”)        Output()输出结果:错误信息
TDate(“2 015-12-5”)        Output()输出结果:错误信息
TDate(“2015-1 2-5”)        Output()输出结果:错误信息
TDate(“2015-12-1 5”)        Output()输出结果:错误信息


如果用split函数进行分割,那如果输入没有“-”这个符号就会报错。

求解,怎么完成这个,使得测试数据全部成立
最佳答案
2017-7-19 17:26:09
本帖最后由 gopythoner 于 2017-7-19 17:28 编辑

还有,如果你非要按照你这个标准去查找时间的话,
我建议你往正则表达式上面想,用正则表达式先把完全不符合你这个格式的踢去
第一步踢去不符合格式的就留下全部满足"年份-月份-日"这种格式
然后把符合格式的留下,进行时间格式筛选
第二部就是踢去像2004-2-28这种关于是否润年的判断,所以要写润年判断
当然,还有,大小月也要判断
毕竟满足时间格式的并不是真的存在的时间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-19 17:17:29 | 显示全部楼层
你把1-01-01这种也当做时间日期?
那你就没法算了,因为日期函数只会计算1000以后的年份,之前的不计算,也就是说,你要自己去判断那些年份的中哪些是润年,那些有2-29的日期,然后要重写大小月
总之,不科学
科学的计算方法是这样的:
  1. import time

  2. def TDate(s):
  3.   try:
  4.     t = time.strptime(s, "%Y-%m-%d")
  5.   except:
  6.     print("错误信息")
  7.   else:
  8.     y,m,d = t[0:3]
  9.     if m < 10:
  10.       m = "0"+str(m)
  11.     if d < 10:
  12.       d = "0"+str(d)
  13.     result = "-".join(map(str,[y,m,d]))
  14.     if k == result:
  15.       print("输出结果:{}".format(k))
  16.     else:
  17.       print("输出结果:{},应该是{}".format(k,result))
复制代码


思路就是,让Python自带的日期模块去检验这个日期字符串是否符合日期标准
符合标准的按照你的输入要求输出,不符合的自动报错就行
自己写标准你要写的猴年马月
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-19 17:26:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 gopythoner 于 2017-7-19 17:28 编辑

还有,如果你非要按照你这个标准去查找时间的话,
我建议你往正则表达式上面想,用正则表达式先把完全不符合你这个格式的踢去
第一步踢去不符合格式的就留下全部满足"年份-月份-日"这种格式
然后把符合格式的留下,进行时间格式筛选
第二部就是踢去像2004-2-28这种关于是否润年的判断,所以要写润年判断
当然,还有,大小月也要判断
毕竟满足时间格式的并不是真的存在的时间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 10:10:14 | 显示全部楼层
gopythoner 发表于 2017-7-19 17:17
你把1-01-01这种也当做时间日期?
那你就没法算了,因为日期函数只会计算1000以后的年份,之前的不计算, ...

这个作业的内容就是实现日期类,不能使用原生日期型数据类型和库文件中的,我询问的只是作业的某个部分,也是最后一步。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 10:11:45 | 显示全部楼层
gopythoner 发表于 2017-7-19 17:26
还有,如果你非要按照你这个标准去查找时间的话,
我建议你往正则表达式上面想,用正则表达式先把完全不符 ...

我知道要去掉所有不符合格式的,你说的正则表达式我还没有学,想问问你,应该如何用正则表达式去掉所有不符合规范的测试数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-20 11:36:17 | 显示全部楼层
轩~ 发表于 2017-7-20 10:11
我知道要去掉所有不符合格式的,你说的正则表达式我还没有学,想问问你,应该如何用正则表达式去掉所有不 ...

自己去查正则的用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 12:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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