2019/09/08 01-位数打印练习和else子句

在这里插入图片描述数字54321,打印位数,比如打万位,5位
//整除
余数 4321%1000= 4321/1000 ,商数是4,余数是321
在这里插入图片描述
**10000每次整除10可以
也可以定义次方的变量n
在这里插入图片描述如果你不测试优先级的问题,就需要先套个括号保险一点 在这里插入图片描述
还是写成这样好看点 在这里插入图片描述
想要知道循环出现问题的话,可以用break,第一次就退出,整个循环就结束了
想要知道哪一层出现问题可以定义一个i==0,第一次等于0就退出
在这里插入图片描述
第二次=1出现问题,就退出,就告诉你是在第二层在这里插入图片描述
**常用的可以打印一层~~~~~~,也可以看出哪一层出了问题
在这里插入图片描述
告诉你每一次得到的结果在这里插入图片描述也可以加x看一下次数,有些可能漏掉了迭代的次数
在这里插入图片描述
思路
先考虑一趟做什么事情
在这里插入图片描述在这里插入图片描述在这里插入图片描述
如果严格按照个位开始打
拿到用户输入,强制转换成整型
如果是00543,int会直接转换成543

在这里插入图片描述
折半查找是几位数在这里插入图片描述
如果写成6就会报异常,除0了在这里插入图片描述在这里插入图片描述
改成10的n次方即可
n代表几位数
在这里插入图片描述
只不过前面都是0在这里插入图片描述
0是假,非0是真,所以就可以加判断在这里插入图片描述
结果在这里插入图片描述
注释掉,其实是空炮了三次在这里插入图片描述在这里插入图片描述
但是如果是00500,该如何呢,现在还是打印不出0在这里插入图片描述
当你从万位开始,第一个开始,非0往后都是有效的,前面都是无效的
比如00500,前面两个0是无效的,后面5开始都是有效的

做一个标记位,假定还没有碰到第一个非0,为false,碰到非0就改成true,表示这个开关标志打开在这里插入图片描述
但是上面这样,后面的500的00 就进不去循环了,就需要修改条件
第一次进去
flag =false 代表0 and(and作为乘法,0乘任何数没有必要乘,false就不能改变) 这样写and就不合适
在这里插入图片描述
**改成这样,先把flag取反,再看y
第一次进来 flag=flase y=x//w 500 //10 * *(6-1) = -00500 第一个位数是0 =0
not flase 表示true =1 (1乘以任何数=任何数) y=0 第一次false
第二次 00500 第二位是0
还是0 就还是false
第三次 00500 ,到达5 ,y=5,not flage=not false=true
可以进入循环,打印5 ,flag变成了 true
**在这里插入图片描述到了第四次, flag=true
not flag =false,false就不能and了 ,所以在这样写是不对的
在这里插入图片描述
把not去掉成不成
第一次进来 flage =false, or(当做+法) ,y=0 0+0还是等于0,进不去
第二次 也是一样 flag=false ,y=0
第三次 falg =false y=5 进去 ,flag=true
第4次 true or true=1 or=+ 1加任何数都是true,就直接可以了
在这里插入图片描述
走一把看看这样0就不是什么大问题了在这里插入图片描述在这里插入图片描述
推理过程在这里插入图片描述在这里插入图片描述
把问题先抽象成小问题,再解决大规模,把核心部分提取出来,变成小问题
这种方法是把值-商数,剩下的就是位数
在这里插入图片描述
divmod
div除法,mode取余
在这里插入图片描述
连除带取模
在这里插入图片描述在这里插入图片描述
解决问题有很多种方法在这里插入图片描述
54001测试了,你再测试看看00451,,01230在这里插入图片描述
依然使用flag标记,
在这里插入图片描述
01230进来以后,
第一次 w =10000 ,flag =false length=5
t=c//w 01230//10000=0 第一位是0
if flag =false 进不来
跳转到 else
if t t是0,不能进去,跳转到else
length-1 =5-1=4,告诉你不是5位数,但是,是不是4位数不确定,看下一次判断
c=c%w=0
w=10000/10=1000
到达第二次,w=1000,length=4,,flag =false
t=c//w 01230//1000=0 第一位是1
if flag =false 进不来
跳转到 else
if t =1 就进来了,找到第一个位数
else的length就不要-1了 ,固定成4
在这里插入图片描述
00451进来以后,
第一次 w =10000 ,flag =false length=5
t=c//w 00451//10000=0 第一位是0
if flag =false 进不来
跳转到 else
if t t是0,不能进去,跳转到else
length-1 =5-1=4,告诉你不是5位数,但是,是不是4位数不确定,看下一次判断
c=c%w=0
w=10000/10=1000
到达第二次,w=1000,length=4,,flag =false
t=c//w 00451//1000=0 第二位是0
if flag =false 进不来
跳转到 else
if t t是0,不能进去,跳转到else
length-1 =4-1=3,告诉你不是4位数,但是,是不是3位数不确定,看下一次判断
c=c%w=0
w=1000/10=100
到达第三次
w=100,length=3,,flag =false
t=c//w 00451//100=0 第三位是4
if flag =false 进不来
跳转到 else
if t =4 就进来了,找到第一个位数
else的length就不要-1了 ,固定成3
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
**break,代表打破,不正常结束,else就不会执行
**在这里插入图片描述
如果可迭代对象是空的,比如range(0)(前开后不开,前包后不包),也叫循环正常结束在这里插入图片描述
break打破循环,不正常结束,else就不执行
在这里插入图片描述
在这里插入图片描述 continue是会正常执行的在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值