dingjie 发表于 2017-11-22 15:47:12

关于小甲鱼学python044课后题的第0题的一些疑问

本来准备上传图片的,但是限制3个,然后中途退出了,既然就已经达到上传上限了。希望论坛可以改进一下,在还没有发表之前,怎么也不能算用过了吧。

begin = (2017, 11, 22, 14, 0, 47,)
end = (2017, 11, 22, 15, 0, 41,)
lasted = []
borrow =

for index in range(6):
    temp = end - begin
    if temp < 0:
         i = 1
         while lasted < 1:
             lasted += borrow -1
             lasted -= 1
             i += 1

         lasted.append(borrow + temp)
         lasted -= 1
    else:
      lasted.append(temp)
    print(lasted)
print(lasted)

上面的代码得到的结果是
0, 0, 0, 1, 0, 54
[-2, 10, 29, 23, 57, 54]
为何索引出来的结果和打印列表出来的结果不同呢

当我在 if 语句里只保留 lasted.append(borrow + temp) 时:
begin = (2017, 11, 22, 14, 0, 47,)
end = (2017, 11, 22, 15, 0, 41,)
lasted = []
borrow =

for index in range(6):
    temp = end - begin
    if temp < 0:
         # i = 1
         # while lasted < 1:
         #   lasted += borrow -1
         #   lasted -= 1
         #   i += 1
         #
          lasted.append(borrow + temp)
         # lasted -= 1
    else:
      lasted.append(temp)
    print(lasted)
print(lasted)

得到的结果如下:
0, 0, 0, 1, 0, 54

那么这段代码到底有什么用呢,不用 while 语句里的代码也可以得到同样的结果,而且在直接打印列表与 索引的结果也是一致的。

dingjie 发表于 2017-11-22 16:40:05

@小甲鱼

payton24 发表于 2017-12-7 15:27:03

我也刚学到这里。按照读取语句来分析:
         i = 1
         while lasted < 1:
             lasted += borrow -1
             lasted -= 1
             i += 1
这段代码根本就没有机会进行读取。
因为时间是从年月日时分秒依次读取的。只要不是乱设置,结束年份不可能小于开始年份。所以lasted永远大于等于0。
后面的语句,一旦temp<0,会执行高位减一,本位加借位的操作。
         lasted.append(borrow + temp)   ##本位加借位列表对应的数
         lasted -= 1                  ##高位减一

操作后,存进lasted的数均>0,不会触发lasted < 1的情况。

例如:(这里假设1个月都有31天)
结束时间为: (2017, 5, 15, 20, 30, 40)
开始时间为: (2016, 10, 20, 22, 40, 50)
利用算术直接相减的结果为:(1,-5,-5,-2,-10,-10)##例子中的-5会经过处理后再放入列表,不存在连续两位为负数的情况。
而我们读得懂的期望结果为(0,6,25,9,49,50)。

目前# lasted -= 1,结果为,刚好少了高位借位的步骤。把这个语句加上再试试吧。

payton24 发表于 2017-12-7 16:29:07

重新调试了一下,发现运行你提供的参数,还是需要执行while语句,不过执行逻辑和甲鱼老师的不一样。
最大的改变是把下列两条语句移到for循环的开始,然后再执行while语句:
lasted.append(borrow + temp)
lasted -= 1
其中,while语句逻辑有少量改动,详见我的帖子:
http://bbs.fishc.com/thread-101090-1-1.html

dingjie 发表于 2017-12-8 16:38:55

payton24 发表于 2017-12-7 16:29
重新调试了一下,发现运行你提供的参数,还是需要执行while语句,不过执行逻辑和甲鱼老师的不一样。
最大 ...

3Q,我试试
页: [1]
查看完整版本: 关于小甲鱼学python044课后题的第0题的一些疑问