五色水仙

首页 » 常识 » 诊断 » 07报数游戏,趣说python循环里的
TUhjnbcbe - 2024/10/16 10:10:00

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

求所有的水仙花数。

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

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

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

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

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

forninrange(,0):

i=int(n/)

j=int(n/10)%10

k=n%10

ifn==i**3+j**3+k**3:

print(n)

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

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

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

报数表演节目游戏

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

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

如果大家都是傻瓜

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

那么程序如下

foriinrange(1,):

print(i)

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

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

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

print(i)

ifi%7==0:

break

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

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

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

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

n=

foriinrange(2,n):

ifn%i==0:

print(i)

print(nisnotaprimenumber)

break

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

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

如果大家都是聪明人

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

程序就变成了下面这样

continue

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

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。

ifi%7==0ori%10==7orint(i/10)%10==7:

做一道练习题吧

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

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

1
查看完整版本: 07报数游戏,趣说python循环里的