鱼C论坛

 找回密码
 立即注册
查看: 1943|回复: 8

[已解决]python课后作业44

[复制链接]
发表于 2019-4-18 22:57:42 | 显示全部楼层 |阅读模式

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

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

x
if temp <0:
        i = 1
        while self.lasted[index-i] <1:
                self.lasted[index-i] += self.borrow[index-i]-1
                self.lasted[index-i-1] -= 1
                i += 1
这段代码感觉有问题的吧,borrow借了一位为什么要减1?假如前两位都是零那不是要变成-1了吗?
求大神解答

最佳答案
2019-4-19 00:29:17
while self.lasted[index-i] <1:这个语句是判断要借位的高位是不是0或者负数,如果是就执行下面的i += 1再向高位的高位借位。

因为while是个循环,直到self.lasted[index-i]不是0或者负数的时候才算借位成功

拿数字举例,10000-1
先是借十位,发现十位不够借,那就通过i += 1控制需要借位的位置,再向高位去借位,直到借到万位的时候发现可以借,然后就可以退出循环了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-19 00:29:17 | 显示全部楼层    本楼为最佳答案   
while self.lasted[index-i] <1:这个语句是判断要借位的高位是不是0或者负数,如果是就执行下面的i += 1再向高位的高位借位。

因为while是个循环,直到self.lasted[index-i]不是0或者负数的时候才算借位成功

拿数字举例,10000-1
先是借十位,发现十位不够借,那就通过i += 1控制需要借位的位置,再向高位去借位,直到借到万位的时候发现可以借,然后就可以退出循环了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 09:48:01 | 显示全部楼层

为什么要self.borrow【index-i】-1?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 09:55:24 | 显示全部楼层

而且每执行一次循环高位的高位还要-1,假如高位的高位也是0,那不就成-1了吗,就退不出循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 09:58:35 | 显示全部楼层
λ_KxYdq 发表于 2019-4-19 09:48
为什么要self.borrow【index-i】-1?

10000-1个位不够减,个位要向十位借1,所以十位要减1,减1就是这么来的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 10:01:52 | 显示全部楼层
λ_KxYdq 发表于 2019-4-19 09:55
而且每执行一次循环高位的高位还要-1,假如高位的高位也是0,那不就成-1了吗,就退不出循环了

while后面的判断条件是小于1,不是大于1,0和-1都是小于1的,条件成立,循环继续执行,怎么就会退出了?

大哥你的思路。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 10:16:11 | 显示全部楼层
cwhsmile 发表于 2019-4-19 10:01
while后面的判断条件是小于1,不是大于1,0和-1都是小于1的,条件成立,循环继续执行,怎么就会退出了?
...

判断前一位是否是负数或0:
前一位等于对应进制-1
前一位的前一位-1
i+1
这四句我是这么理解的
那么假如现在我的列表里是【100】三个元素,现在要判断index为3情况,那么self.lasted[index-i]就是self.lasted[3-1]就是元素0对吧,进入while循环,然后执行第二句,此时self.lasted[2] = self.borrow[2]-1=31-1=30,self.lasted[index-i-1]就是self.lasted[1]=0,执行第三条语句,self.lasted[1]=-1,i变成2,继续while循环,self.lasted[3-2]=-1<1,self.lasted[1]=12-1=11,然后self.lasted[o]=0,i变成3,再判断的话怎么判断?已经到最高位了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 11:18:28 | 显示全部楼层
cwhsmile 发表于 2019-4-19 10:01
while后面的判断条件是小于1,不是大于1,0和-1都是小于1的,条件成立,循环继续执行,怎么就会退出了?
...

老哥,你仔细看看,有问题,假如我现在是100 -1,十位变成11,百位变成0,然后i+1=2,但是index没变,那么self.lasted[0]就是百位,还是0,还要循环,百位变成-1,十位变成10,i变为3,才会退出循环,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 11:43:49 | 显示全部楼层
λ_KxYdq 发表于 2019-4-19 11:18
老哥,你仔细看看,有问题,假如我现在是100 -1,十位变成11,百位变成0,然后i+1=2,但是index没变,那么 ...

教你一个调试代码的方法:
把你觉得有疑问的地方复制出来单独建立一个文件,在循环体内加上print()函数,打印出你认为有疑问的地方,然后手工填入循环体所需要的数据。
比如下面的代码,你手动更改temp和i的数值,自己观察变化
  1. temp = 1000
  2. i = 1
  3. while i < 10:
  4.     temp = temp - i
  5.     #如上面这段代码,你不确定temp和i的数值,就用下面的print()函数输出
  6.     print(f'temp是{temp}',f'i是{i}')
  7.     i = i + 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 04:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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