程序员小A下班回家,老婆打来电话
“家里来客人了,去菜市场买个西瓜。如果有西红柿的话,买两个。”
结果菜市场有西红柿,但小A却买了2个西瓜,没有买西红柿。而小A老婆的意思显然是如果没有西红柿就买1个西瓜,如果有西红柿,就买1个西瓜和2个西红柿。
流程图。因为图形往往比文字更清晰,更容易理解。
在上面的流程图里。有4种不同的图形。
黑色实心圆:表示流程的开始。
黑色非实心圆:表示流程的结束
橙色长方形:表示一个具体的行动,做一件具体的事情。
绿色菱形:表示一个判断。
从流程图可以清晰地发现,小A老婆的意思是先买西瓜,然后看是否有西红柿,有的话,买2个西红柿;而小A则把是否有西红柿这个判断条件作为买1个还是2个西瓜的条件。
条件语句。
条件语句
如下图,python里的条件语句和实现中条件判断的逻辑是完全一致的。
具体的python语法是:
if 判断条件:
执行语句1……
else:
执行语句2……
以小A买西瓜为例,我们假设函数 haveTomatoes()可以返回是否有西红柿,那么具体的程序就是
if haveTomatoes():
print('buy 2 watermelons')
else:
print('buy 1 watermelon')
条件语句的语法很简单,不过还是有几点需要注意:
比较运算就可以作为判断条件语句。
比如,比较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.')
缩进。(在我们的开发环境里,打了冒号之后回车换行,会自动缩进。)
3.如果有多个条件分支时,可以用如下的语法。
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……
循环语句
现实生活中,除了判断逻辑外,还有一种常见的逻辑,就是当条件满足的时候,反复做相同的事情。
程序员小A的儿子很调皮,今天又闯祸了。气急之下,小A要揍儿子,而小A老婆则在一旁煽风点火,还帮着计数,说要揍满100下。
流程图直观地说明。
现实中,每次揍孩子之前,都需要先判断一下,是否已经揍满了100下,如果没有,才继续揍,否则就结束。
死循环。
循环语句来表示现实生活中的循环逻辑。
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句,更为简洁。
内置函数 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。
如果不使用高斯的方法,而是使用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位自幂数叫十全十美数。