python逢7跳过_07.报数游戏:7的倍数或含7的数跳过,趣说python循环里的break和continue...

转自同名微信公众号。

自幂数是指一个 n 位数,它的每个位上的数字的n 次幂之和等于它本身。比如 153 = 1**3 + 5**3 + 3**3,是一个3位数的自幂数,也称水仙花数。

求所有的水仙花数。

求水仙花的循环逻辑很简单,range(100,1000),即从100到999。

但如何获取个位,十位,百位上的数字则需要灵活应用之前的知识。

个位:n%10,即数字除以10的余数。

十位:int(n/10)%10,即数字除以10的整数部分,再除以10的余数。

百位:int(n/100),即数字除以100的整数部分。

for n in range(100,1000):

i = int(n/100)

j = int(n/10)%10

k = n % 10

if n == i ** 3 + j ** 3 + k ** 3:

print(n)

在这道题中,确定了循环范围[100,1000)后,对范围内的每个数字都进行了判断。但现实中,往往还有2种不一样的情形

1 碰到某个数字,循环直接结束。

2 碰到某个或某些数字,跳过它(或它们)。

报数表演节目游戏

报数游戏是集体活动时经常会玩的一个游戏。

假设有100个人,从1开始报数,碰到7的倍数跳过,如果没有跳过就惩罚他表演一个节目。

如果大家都是傻瓜

首先,如果只是100个人报数,我们用 print(i) 表示把数字 i 报数出来。

那么程序如下

for i in range(1,101):

print(i)

程序执行,会在电脑屏幕上依次打印1,2,3,4,5,6,7,8……100。

当我们制定游戏规则是逢7的倍数跳过后,如果某个人不小心报出了7的倍数,循环就应该提前结束。

假设这100个人都是傻瓜,只会从1开始往后报数,那么当报到7的时候,游戏就结束了,就如下面的程序。

for i in range(1,101):

print(i)

if i % 7 == 0 :

break

在python里,我们使用 break 来提前结束整个循环。

注意并体会break的缩进位置。

类似的例子还有判断一个数是不是素数(质数)。

比如,判断 n = 61199293 是不是素数。

n = 61199293

for i in range(2,n):

if n % i == 0:

print(i)

print('n is not a prime number')

break

循环的范围是[2,n),但如果我们在循环过程中找到一个数,可以整除n,那么n就已经不是素数了,后面的循环就没有必要继续下去了。所以,我们使用break提前结束了循环。

注意并体会break的缩进位置,可以把break换个位置,看看结果有什么不同。

如果大家都是聪明人

如果这100个人都是聪明人,都不会犯错。碰到7的倍数都会跳过。

程序就变成了下面这样

for i in range(1,101):

if i % 7 == 0 :

continue

print(i)

程序执行,电脑屏幕上会打印1,2,3,4,5,6,8……100。

7的倍数都不会被打印。

原因在于,变量i从1开始循环, 每次都会先判断 i % 7 是否等于0。

如果 i % 7 不等于0,才会执行 print(i),把 i 打印出来。

如果 i % 7 等于0, 执行 continue,就提前跳出了本次循环,不会再执行print(i)。

在python里,我们使用 continue来提前跳出本次循环。

不仅要注意并体会break的缩进位置。还要体会print(i)的位置,可以把print(i)放在if语句上面,看看是什么效果。

规则变成7的倍数或者含7的数

现实中,报数游戏的规则往往要更复杂一些,比如7的倍数或者含7的数都要跳过。

在前面的程序里,if 后面的判断条件,我们使用的是 比较运算: i % 7 == 0。只能表达 7的倍数这一个规则,所以,我们要介绍一种新的运算: 逻辑运算。

python里的逻辑运算符一共只有3个:and,or,not。它们的含义如下表格。

所以,我们可以使用 or 把

i % 7 ==0 是7的倍数

i % 10 == 0 个位是7

int(i / 10) % 10 == 7 十位是7

这3个比较运算的结果连接起来。表示只要其中1个是True,结果就是True。

for i in range(1,101):

if i % 7 == 0 or i % 10 == 7 or int(i / 10) % 10 == 7 :

continue

print(i)

做一道练习题吧

一个正整数加上168之后是完全平方数,再加上168又是一个完全平方数。求这个数。

注: 完全平方数的题目在奥数里颇为常见,不仅是小学奥数,初中、高中奥数也经常看到完全平方数的身影,有兴趣的话可自行搜索。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值