题目:

对电话账单来说,春季和秋季的标准时间与夏时制时间的转换会带来有意思的问题。春 季,这种转换发生在(3 月末,4 月初的)星期日凌晨 2:00 时,这时时钟要设置为凌晨 3:00 时。对称的转换通常发生在 10 月最后一个星期日,时钟要从 2:59:59 调回到 2:00:00。

请为采用以下费率计算用户的每月通话费:

(1)通话时间<=20 分钟时,每分钟收费 0.05 美元,通话时间不到 1 分钟时按 1 分钟 计算。

(2)通话时间>20 分钟时,收费 1.00 美元,外加每分钟 0.10 美元,超过 20 分钟的部 分,不到 1 分钟时按 1 分钟计算。

假设:

(1)通话计费时间从被叫方应答开始计算,到呼叫方挂机时结束。

(2)通话时间的秒数四舍五入到分钟。

(3)没有超过 20 个小时的通话。

最近,软件测试实验要求,写一个程序,关于电话账单的题目,要交作业了,我现在修改了代码,写个博客。在网上,也找搜了好些,但是基本上都是用Java或者c++来写的,我觉得这个代码太麻烦了,使用了python来解决了这道题,可能有点不对,但是可以参考。使用Python的时间类datetime包处理时间比Java和c++简单得多。

先说说我对这道题的理解,也不知道对不对,我是按照我的理解来写的代码。我的理解是春夏时制转换的时候,需要减去一个小时,如从01:30:00开始通话,当到达02:00:00的时候,由于存在转换,此时显示的是03:30:00。相应的夏秋时制转换的时候,需要加上一个小时,如从02:00:00通话,到02:10:00结束,由于存在转换,可以是由02:00:00通话到02:59:59后,调回到02:00:00然后又继续通话十分钟,实际是70分钟,当然这个02:00:00也可以是从02:59:59调回到02:00:00后在进行通话的,所有也有可能是10分钟。

from datetime import datetime as dt

import datetime

print("请输入如'2020-03-20 14:16:30'的时间格式")

# 判读输入的时间是否正确,是否超过20小时,如果错误,将重新输入

while True:

start_time = input("输入通话开始时间:\n")

end_time = input("输入通话结束时间:\n")

s_time = dt.strptime(start_time, '%Y-%m-%d %H:%M:%S') #标准化输入时间

e_time = dt.strptime(end_time, '%Y-%m-%d %H:%M:%S')

time_difference = (e_time - s_time)

if time_difference.total_seconds() < 0 or time_difference.total_seconds() // 3600 > 20:

month = s_time.strftime("%m")

day = s_time.strftime("%d")

week = s_time.strftime("%w")

hour_str = s_time.strftime("%H")

hour_end = e_time.strftime("%H")

# 这里判断时间是否是十月最后一个星期日,如果是可以输入开始时间为02:30:00,结束时间为02:10:00

if int(month) == 10 and 31-int(day)<7 and int(week) == 0 and int(hour_str) == 2 and int(hour_end) == 2:

break

else:

print("输入的时间有误,请重新输入!")

else:

break

# 春夏时制转换收费

def fee_transformation_sum(minute, second):

total_minute = minute - 60

fee_transformation_no(total_minute, second)

# 夏秋时制转换收费

def fee_transformation_aut(minute, second):

total_minute = minute + 60

fee_transformation_no(total_minute, second)

# 无时制转换收费

def fee_transformation_no(minute, second):

if second == 0:

if minute <= 20:

fee = minute * 0.05

print("通话费用是:", fee)

else:

fee = 1 + (minute - 20) * 0.1

print("通话费用是:", fee)

else:

if (minute + 1) <= 20:

fee = (minute + 1) * 0.05

print("通话费用是:", fee)

else:

fee = 1 + (minute + 1 -20) * 0.1

print("通话费用是:", fee)

# 获取输入的时间的月份、天数、星期几、小时

month = s_time.strftime("%m")

day_s = s_time.strftime("%d")

week_s = s_time.strftime("%w")

hour_s = s_time.strftime("%H")

hour_e = e_time.strftime("%H")

# 取得通话时长

minutes = time_difference.total_seconds() // 60

seconds = time_difference.total_seconds() % 60

if int(month) == 3 and 31-int(day_s)<=7 and int(week_s) == 0 and int(hour_e) > 2:

print("是三月最后一个星期日且通话时间是在02:00:00之前,调至03:00:00之后")

fee_transformation_sum(minutes, seconds)

elif int(month) == 4 and int(day_s)<7 and int(week_s) == 0 and int(hour_e) > 2:

print("是四月最初一个星期日且通话时间是凌晨两点到三点之间")

fee_transformation_sum(minutes, seconds)

elif int(month) == 10 and 31-int(day_s)<=7 and int(week_s) == 0:

if int(hour_e) == 2 and minutes >= 0:

print("如果是十月最后一个星期日且通话时间是在02:00:00之前,转换到02:00:00,则")

fee_transformation_aut(minutes, seconds)

print("或者是十月最后一个星期日且通话时间是在02:00:00之前,未转换到02:00:00,则")

fee_transformation_no(minutes, seconds)

elif int(hour_s) == 2 and int(hour_e) == 2 and minutes < 0:

minu = (time_difference.total_seconds() + 3600) // 60

seco = (time_difference.total_seconds() + 3600) % 60

fee_transformation_no(minu, seco)

else:

fee_transformation_no(minutes, seconds)

else:

fee_transformation_no(minutes, seconds)

以下是按照等价类和边界值进行测试的数据

等价类划分:

T1={通话时长不到1分钟}

T2={1分钟 ≤ 通话时长 ≤ 20分钟}

T3={通话时长大于20分钟}

S1={无时制转换}

S2={春时制与夏时制转换}

S3={夏时制与秋时制转换}

用例ID

输入数据

预期输出

实际输出

是否通过

备注

1

2020-02-26 14:00:00

2020-02-26 14:00:10

0.05

0.05

对应等价类T1,S1

2

2020-03-29 02:00:00

2020-03-29 03:00:20

0.05

0.05

对应等价类T1,S2

3

2020-10-25 02:59:34

2020-10-25 02:00:22

0.05

0.05

对应等价类T1,S3

4

2020-10-25 01:59:22

2020-10-25

02:00:20

5.1或0.05

5.1或0.05

对于等价类T1,S3

5

2020-02-26 14:00:00

2020-02-26 14:18:10

0.95

0.95

对应等价类T2,S1

6

2020-03-29 01:59:00

2020-03-29 03:16:10

0.9

0.9

对应等价类T2,S2

7

2020-10-25 02:58:00

2020-10-25 02:16:10

0.95

0.95

对应等价类T2,S3

8

2020-10-25 01:58:00

2020-10-25 02:16:10

6.9或0.95

6.9或0.95

对应等价类T2,S3

9

2020-02-26 14:00:00

2020-02-26 15:30:30

8.1

8.1

对应等价类T3,S1

10

2020-03-29 01:59:00

2020-03-29 03:16:10

0.9

0.9

对应等价类T3,S2

11

2020-10-25 01:58:00

2020-10-25 02:36:10

8.9或2.9

8.9或2.9

对应等价类T3,S3

12

2020-10-25 02:36:10

2020-10-25 02:26:10

4.0

4.0

对应等价类T3,S3

边界值测试:

边界值分析:

通话时长:{59s,1min,1min1s,19min,19min59s,20min,20min1s,21min}

通话日期:{无时制转换时间,三月末四月初的一个星期日(春时制与夏时制转换),十月的最后一个星期日(夏时制与秋时制转换)}

用户ID

输入数据

预期输出

实际输出

是否通过

备注

1

2020-02-27 14:00:00

2020-02-27 14:00:59

0.05

0.05

59s,无转换

2

2020-03-29 01:59:10

2020-03-29 03:00:09

0.05

0.05

59s,春夏转换

3

2020-10-25 02:59:10

2020-10-25 02:00:09

0.05

0.05

59s,夏秋转换

4

2020-02-27 14:00:12

2020-02-27 14:01:12

0.05

0.05

1min,无转换

5

2020-03-29 01:59:10

2020-03-29 03:00:10

0.05

0.05

1min,春夏转换

6

2020-10-25 02:59:10

2020-10-25 02:00:10

0.05

0.05

1min,夏秋转换

7

2020-02-27 14:00:12

2020-02-27 14:01:13

0.1

0.1

1min1s,无转换

8

2020-03-29 01:59:10

2020-03-29 03:00:11

0.1

0.1

1min1s,春夏转换

9

2020-10-25 02:59:10

2020-10-25 02:00:11

0.1

0.1

1min1s,夏秋转换

10

2020-02-27 14:00:12

2020-02-27 14:19:12

0.95

0.95

19min,无转换

11

2020-03-29 01:59:10

2020-03-29 03:18:10

0.95

0.95

19min,春夏转换

12

2020-10-25 02:59:10

2020-10-25 02:18:10

0.95

0.95

19min,夏秋转换

13

2020-02-27 14:00:12

2020-02-27 14:20:11

1.0

1.0

19min59s,无转换

14

2020-03-29 01:59:10

2020-03-29 03:19:09

1.0

1.0

19min59s,春夏转换

15

2020-10-25 02:59:10

2020-10-25 02:19:09

1.0

1.0

19min59s,夏秋转换

16

2020-02-27 14:00:12

2020-02-27 14:20:12

1.0

1.0

20min,无转换

17

2020-03-29 01:59:10

2020-03-29 03:19:10

1.0

1.0

20min,春夏转换

18

2020-10-25 02:59:10

2020-10-25 02:19:10

1.0

1.0

20min,夏秋转换

19

2020-02-27 14:00:12

2020-02-27 14:20:13

1.1

1.1

20min1s,无转换

20

2020-03-29 01:59:10

2020-03-29 03:19:11

1.1

1.1

20min1s,春夏转换

21

2020-10-25 02:59:10

2020-10-25 02:19:11

1.1

1.1

20min1s,夏秋转换

22

2020-02-27 14:00:12

2020-02-27 14:21:12

1.1

1.1

21min,无转换

23

2020-03-29 01:59:10

2020-03-29 03:20:10

1.1

1.1

21min,春夏转换

24

2020-10-25 02:59:10

2020-10-25 02:20:10

1.1

1.1

21min,夏秋转换

实验测试的部分截图:

我个人觉得还是python写起来简单很多的。

python手机话费_Python软件测试中“电话费”问题的解决方案,python,版本,账单,题解...相关推荐

  1. python 手机测试_python脚本如何测试手机

    一.adb 相关命令: 1.关闭adb服务:adb kill-server 2.启动adb服务  adb start-server 3.查询当前运行的所有设备  adb devices 4.可能在ad ...

  2. python oop编程_Python 3中的面向对象编程(OOP)

    python oop编程 In this article you'll pick up the following basic concepts of OOP in Python: 在本文中,您将了解 ...

  3. python 误差线_Python | 绘图中的误差线

    python 误差线 It is one of the most important aspects of plotting. Because of the huge application in e ...

  4. python自学行_python自学行吗 新手可以自学python吗

    python自学行吗?我们知道python是开发人工智能的编程语言,多年来不温不火,直到最近python编程随着人工智能的火爆而变得热门起来,那么现在学习python编程可以吗,python自学难度大 ...

  5. python手机编译器可以干什么_世界上最好的Python编辑器是什么?

    在这种情况下,你需要使用一个 IDE(集成开发环境)或专用的代码编辑器.由于 Python 是最流行的编程语言之一,IDE 的选择也非常多.那么问题来了:「究竟什么样的 IDE 最适合 Python? ...

  6. python电子章_python二级电子教案 第2章 Python语言基本语法元素

    <python二级电子教案 第2章 Python语言基本语法元素>由会员分享,可在线阅读,更多相关<python二级电子教案 第2章 Python语言基本语法元素(46页珍藏版)&g ...

  7. 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  8. python windows教程_python从入门到精通 windows安装python图文教程

    python的官方介绍是: python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...

  9. python行业发展前景_python为什么这么火|为什么要学Python?过来人告诉你Python的行业发展前景...

    [www.shkuanshun.cn--实践技能] [导语]听到很多人在谈论Python语言用到的地方,做Python语言的工资,Python语言的优势,你心里必然有些疑问,Python到底怎么样?为 ...

最新文章

  1. Too Many Segments CF595D 贪心乱搞
  2. 测试在强电磁场下基于HALL的电流传感器 ACS712-5A是否会有到影响?
  3. Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。
  4. 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程
  5. IIS 上传文件大小配置步骤(默认200K)
  6. 使用CRM的List WebPart
  7. 编程实现将一个N进制数转换成M进制数
  8. Java开发框架!阿里大牛亲手操刀微服务架构实战
  9. ubuntu使用python_Ubuntu+Python环境配置(III)—用Python
  10. Facebook如何“养号”干货分享
  11. 2019 年备受争议的 Facebook 能否走出去年的阴影?| 畅言
  12. 零点起飞学Visual C++
  13. Ubuntu中配置虚拟专用网络***
  14. python实现键盘记录木马_Python告诉你木马程序的键盘记录原理
  15. Akamai:三季度DDoS攻击总数同比上涨138% 规模超100 Gbps
  16. 19. JavaScript RegExp 对象
  17. 数据库 - BC范式(BCNF)
  18. kill the one(pjone歌词摘录)
  19. 微信点餐系统—买家订单(二 Service层,重难点)
  20. R与Rtools版本不兼容问题

热门文章

  1. 组图:1912年斯德哥尔摩奥运会
  2. BTC-Relay与RootStock侧链技术对比
  3. 编辑器之神—Vim 常用快捷键
  4. 周杰伦入局元宇宙,带你搞懂元宇宙怎么玩
  5. 赢在云端:VMware跨云架构,让“云”卷“云”舒自由可控!——访VMware公司大中华区高级技术总监李刚
  6. switchyomega规则列表备份_详细资料|switchyomega设置教程详细介绍_234游戏网
  7. linux能修改用户的权限,linux怎样修改用户权限
  8. 192.168.49.1登录_192.168.49.1路由器登录页面打不开
  9. Smoke testing,Sanity testing and Regression testing
  10. 手风琴几排簧好_手风琴三排簧和四排簧的区别