51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3374|回复: 5

[求助] 刚接触python的新手请问一个循环不变量证明循环正确的问题

[复制链接]
  • TA的每日心情
    无聊
    14 小时前
  • 签到天数: 385 天

    连续签到: 4 天

    [LV.9]测试副司令

    发表于 2019-2-18 09:24:53 | 显示全部楼层 |阅读模式
    1测试积点

    下边是mergesort代码:
    01 def head(Q):
    02 return Q[0]

    03 def tail(Q):
    04 return Q[1:]

    05 def mergesort(U):
    06 if U == [] or tail(U) == []:
    07 return U
    08 else:
    09 L = []
    10 R = []
    11 while U != [] and tail(U) != []:
    12 L = L + [head(U)]
    13 U = tail(U)
    14 R = R + [head(U)]
    15 U = tail(U)
    16 L = L + U
    17 L = mergesort(L)
    18 R = mergesort(R)
    19 S = []
    20 while L != [] and R != []:
    21 if head(L) <= head(R):
    22 S = S + [head(L)]
    23 L = tail(L)
    24 else:
    25 S = S + [head(R)]
    26 R = tail(R)
    27 S = S + L + R
    28 return S
    要找到一个循环不变量证明循环(line9-16)是正确的,这个循环不变量应该是U,循环开始之前U保持原始状态不变;每次循环迭代后U失去前两个元素分别给L和R,在下次循环开始之前U保持剩余元素不改变;循环结束的条件是U为空或只有一个元素,此时U保持判定false之前的状态依旧不变,若是剩余一个元素,语句L=L+U将其加入到L中,满足将元素依次加到L和R中的功能。
    不知道我这样理解对不对,求大佬解答


    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    13 小时前
  • 签到天数: 1367 天

    连续签到: 4 天

    [LV.10]测试总司令

    发表于 2019-2-19 10:37:00 | 显示全部楼层
    差不多的
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-27 08:30
  • 签到天数: 471 天

    连续签到: 1 天

    [LV.9]测试副司令

    发表于 2019-2-19 11:29:48 | 显示全部楼层
    没什么问题,可以先赋值给别的元素
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    16 小时前
  • 签到天数: 2636 天

    连续签到: 4 天

    [LV.Master]测试大本营

    发表于 2019-2-19 13:05:40 | 显示全部楼层
    应该没啥问题
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 1647 天

    连续签到: 4 天

    [LV.Master]测试大本营

    发表于 2019-2-19 14:53:44 | 显示全部楼层
    没问题
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-3-28 23:29 , Processed in 0.065059 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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