python 循环语句结果存储_06.程序员买西瓜和打孩子,趣说python的条件语句和循环语句...

696840a53fc2a36b1c9770531f5b04b3.png

转自同名微信公众号

程序员小A下班回家,老婆打来电话

“家里来客人了,去菜市场买个西瓜。如果有西红柿的话,买两个。”

结果菜市场有西红柿,但小A却买了2个西瓜,没有买西红柿。而小A老婆的意思显然是如果没有西红柿就买1个西瓜,如果有西红柿,就买1个西瓜和2个西红柿。

为了澄清这个误会,我们先介绍一种用图形来表述问题的方法:流程图。因为图形往往比文字更清晰,更容易理解。

445c1f4ddb59ba3c8b761735068c1e90.png

在上面的流程图里。有4种不同的图形。

黑色实心圆:表示流程的开始。

黑色非实心圆:表示流程的结束

橙色长方形:表示一个具体的行动,做一件具体的事情。

绿色菱形:表示一个判断。

从流程图可以清晰地发现,小A老婆的意思是先买西瓜,然后看是否有西红柿,有的话,买2个西红柿;而小A则把是否有西红柿这个判断条件作为买1个还是2个西瓜的条件。

现实生活中,我们经常需要根据判断条件结果的不同而采取不同的行动。在python里,这称为条件语句


条件语句

如下图,python里的条件语句和实现中条件判断的逻辑是完全一致的。

e8c0c60a41f3417112e5c5c5416035b7.png

具体的python语法是:

if 判断条件:
    执行语句1……
else:
    执行语句2……

以小A买西瓜为例,我们假设函数 haveTomatoes()可以返回是否有西红柿,那么具体的程序就是

 if haveTomatoes():
    print('buy 2 watermelons')
else:
    print('buy 1 watermelon')

条件语句的语法很简单,不过还是有几点需要注意:

1. if 后面的判断条件语句一定要返回True或者False。如上一篇我们学习过的比较运算就可以作为判断条件语句。

比如,比较a,b两个数字的大小,如果a大于b,则打印“a比b大”,否则打印“a比b小”。

a = 1/3
b = 0.3
if a>b :
    print('a is bigger than b.')
else:
    print('a is smaller than b.')

2.书写的格式,冒号和缩进。if 和 else后面别忘记冒号。冒号下面的语句要缩进。(在我们的开发环境里,打了冒号之后回车换行,会自动缩进。)

3.如果有多个条件分支时,可以用如下的语法。

if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……

循环语句

现实生活中,除了判断逻辑外,还有一种常见的逻辑,就是当条件满足的时候,反复做相同的事情。

程序员小A的儿子很调皮,今天又闯祸了。气急之下,小A要揍儿子,而小A老婆则在一旁煽风点火,还帮着计数,说要揍满100下。

a98083ae7684ccbfbe1538e6461812c4.png

还是用如下的流程图直观地说明。

4aa515483defed6e0cf89b806ec8ec0f.png

现实中,每次揍孩子之前,都需要先判断一下,是否已经揍满了100下,如果没有,才继续揍,否则就结束。

一定要注意,在橙色框里,要把揍的次数+1,否则就会永远揍下去,在python里,我们称为死循环

在python里,用循环语句来表示现实生活中的循环逻辑。

python里的循环语句有2种方法:while循环,for循环

以小A打孩子为例,while循环的写法如下。

count = 0 
while count <= 100:
    print('hit the baby!')
    count += 1

注意 count += 1 等效于 count = count + 1。

这个语句一定要加上,要不就是死循环,小A的儿子怕是会被打死。

那么for循环怎么写呢?

for count in range(1,101):
    print('hit the baby!')

和while循环相比,for循环只需要2句,更为简洁。

诀窍在于,for循环里用到一个内置函数 range()

while循环就像是小A边揍孩子边计数,而for循环,小A只管揍,计数的工作交给了妈妈range()。

在上面的程序里,range(1,101) 相当于半闭半开区间 [1,101),就是从1到100。所以不需要额外再写 count += 1。

range()还有其它几种写法。

range(100) 等效于 range(0,100),相当于 [0,100)

range(1,101,2),后面的2表示步长。相当于 1,3,5,7 …… 99。

甚至还可以反过来计数

range(100,1,-2),相当于 100,98,96 …… 2。


高斯的故事

“数学王子”高斯有一个大家耳熟能详的小故事。计算从1加到100。

5a94baf642bd54d4560e0c87ec7ed66e.png

如果不使用高斯的方法,而是使用python的循环语句从1加到100要怎么做呢?

result = 0 
for i in range(1,101):
    result = result + i

要理解一下result在程序里起的作用。


计算自幂数

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

求所有的水仙花数。

注:广义的水仙花数只要每个位上的数字的3次幂之和等于它本身。但这里我们只求3位数的水仙花数。

注:4位自幂数叫四叶玫瑰数,5位自幂数叫五角星数,6位自幂数叫六合数,7位自幂数叫北斗七星数,8位自幂数叫八仙数,9位自幂数叫九九重阳数,10位自幂数叫十全十美数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值