【Python】Python之条件判断和循环
今天,我们来学习Python的一个灰常灰常重要的知识内容——条件判断和循环。在学习之前,我想请大家先联想回忆一下,我们以前学习的C语言内容,联系C语言的条件判断语句 if-else语句以及循环语句for语句和while语句,通过两种语言的联系,会有助于大家对Python的条件判断和循环的理解。
Python之if语句
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现:
age = int(input('请输入你的年龄:'))
if age >= 18:
print ('your age is', age)
print ('you are an adult!')
值得注意得是: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的三四行 print 语句就构成一个代码块,如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
还有一点要注意: if 语句后接表达式,然后要以( : ) 表示代码块开始。
如果我们在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车键的。
Python之 if-else
当 if 语句判断表达式的结果为 True 时,就会执行 if 包含的代码块:
if age >= 18:
print ('your age is', age)
print ('you are an adult!')
如果我们想判断年龄在18岁以下时,打印出 '‘you are a teenager!’,应该怎么办?
再写一个if 判断语句吗?
if age < 18:
print ('your age is', age)
print ('you are a teenager!')
还是用 not 运算进行判断:
if not age >= 18:
print ('your age is', age)
print ('you are a teenager!')
其实我们可以发现,这两种条件判断是“非此即彼”的,要么符合条件1,要么就符合条件2,因此完全可以用一个 if … else … 语句把它们统一起来:
if age >= 18:
print ('your age is', age)
print ('you are an adult!')
else:
print ('your age is', age)
print ('you are a teenager!')
利用 if … else … 语句,我们可以根据条件表达式的值为 True 或者 False ,分别执行 if 代码块或者 else 代码块。
要注意: else 后面有个“:”。
Python之 if-elif-else
倘若有的时候,一个 if … else … 还不够用,那应该怎么办?比如说,根据年龄的划分:
划分1:18岁或以上:adult
划分2:6岁或以上:teenager
划分3:6岁以下:kid
我们或许可以尝试用一个 if (age >= 18) 判断是否符合条件1,如果不符合,再通过一个 if 判断 (age >= 6) 来判断是否符合条件2,否则,执行条件3:
age = int(input('请输入你的年龄:'))
if age >= 18:
print('your age is', age)
print('you are an adult!')
else:
if age >= 6:
print('your age is', age)
print('you are a teenager!')
else:
print('your age is', age)
print('you are a kid!')
这样写出来,我们就得到了一个两层嵌套的 if … else … 语句。这个逻辑是没有问题的,但是如果继续增加条件,比如3岁以下是 baby,那就又要有所改动:
age = int(input('请输入你的年龄:'))
if age >= 18:
print('your age is', age)
print('you are an adult!')
else:
if age >= 6:
print('your age is', age)
print('you are a teenager!')
else:
if age >= 3:
print('your age is', age)
print('you are a kid!')
else:
print('your age is', age)
print('you are a baby!')
我们会发现这种缩进只会越来越多,随之而来的是代码也会越来越难看。
为了避免嵌套结构的 if … else …,我们可以用 if … 多个elif … else … 的结构,一次写完所有的规则:
age = int(input('请输入你的年龄:'))
if age >= 18:
print('your age is', age)
print('you are an adult!')
elif age >= 6:
print('your age is', age)
print('you are a teenager!')
elif age >= 3:
print('your age is', age)
print('you are a kid!')
else:
print('your age is', age)
print('you are a baby!')
elif 意思就是 else if,这样一来,我们就写出了结构非常清晰的一系列条件判断了。
特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接被忽略,不再执行了。
我们下面来看一个代码:
age = int(input('请输入你的年龄:'))
if age >= 6:
print('your age is', age)
print('you are a teenager!')
elif age >= 18:
print('your age is', age)
print('you are an adult!')
elif age >= 3:
print('your age is', age)
print('you are a kid!')
else:
print('your age is', age)
print('you are a baby!')
当 age = 10 时,结果打印出 ‘you are a teenager!’ 是正确的;但 当age = 20 时,为什么结果还是打印出 ‘you are a teenager!’ ?
原因是当我们输入一个大于等于6的数时,代码执行第一个 if 判断,然后得出并且打印出 'you are a teenager!'的结果,然后代码就直接跳出,不在进行下一个判断语句了,自然也不会打印出其他的结果。
如果要修复代码,那应该怎么做呢?下面我给出我的修复结果:
if age >= 18:
print('your age is', age)
print('you are an adult!')
elif age >= 6:
print('your age is', age)
print('you are a teenager!')
elif age >= 3:
print('your age is', age)
print('you are a kid!')
else:
print('your age is', age)
print('you are a baby!')
所以我们在执行多条判断语句时,一定要注意条理性,一定要遵行某个特定顺序进行语句判断,或者简单地说,要从判断条件定义域范围小的开始,然后到范围大的结束,层层递进,完成代码所要实现的目的。
Python之 for循环
我们在之前的文章中,了解到list或tuple是可以表示一个有序集合的,但如果我们想依次访问一个list中的每一个元素呢?比如 list:
name = ['Lisa','Malina','Ned','Andy']
print (name[0])
print (name[1])
print (name[2])
print (name[3])
如果list只包含几个元素,这样写还可以实现代码的目的;但是如果list包含1万个元素,那我们写1万行print函数就不大实际了。
在这个候,循环就可以派上用场了。
Python的 for 循环就可以依次把list或tuple的每个元素迭代出来:
name = ['Lisa','Malina','Ned','Andy']
for nm in name:
print(nm)
注意: nm这个变量是在 for 循环中定义的,意思是依次取出list中的每一个元素,并把元素赋值给 nm,然后执行for循环体,也就是缩进的代码块。
通过 for 循环函数,遍历一个list或者tuple就显得非常容易了。
我们下面来看一个例题:
班里考试后,老师要统计班里同学的平均成绩,已知其中4位同学的成绩如下:77,99,88,66
请利用for循环计算出四位同学的平均成绩。
解析:在使用 for 循环之前,我们需要对四名同学的成绩,使用list集合表示出来,如下:mark = [77,99,88,66],然后我们构建 for 循环语句:
mark = [77,99,88,66]
sum = 0
for a in mark:
sum += a
print (sum / 4)
通过利用一个sum变量累加就可以计算出总成绩,然后再对总成绩求平均值。
Python之 while循环
和上文中的 for 循环不一样的另一种循环是 while 循环,while 循环不会迭代 list 或 tuple 的元素,而是根据表达式判断循环是否结束。
比如说,要从 0 开始打印不大于 N 的整数:
N = int(input('请输入数字:'))
x = 0
while x <= N:
print ( x )
x += 1
测试结果:
while循环每次先判断 x <= N,如果为True,则执行循环体的代码块,否则就跳出循环。
在循环体内,x +=1会让 x 不断增加,最终因为 x < N 不成立而退出循环。如果没有这一个语句,while循环在判断 x <= N 时总是为True,就会无限循环下去,变成死循环,所以要特别留意while循环的退出条件。
我们看如下命题:利用while循环计算100以内奇数的和。
具体代码如下:
sum = 0
x = 1
while x <= 100:
sum += x
x += 2
print ( sum )
Python之 break退出循环
在我们使用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句实现。
比如计算 1 至 某个大于1整数 的和,我们使用while来实现:
a = int(input('请输入数字:'))
sum = 0
x = 1
while True:
sum += x
x += 1
if x > a:
break
print ( sum )
起初看来, while True 就是一个死循环,但是在循环体内,我们还判断了 x > a 条件成立时,用break语句跳出循环,这样也可以实现循环的结束。
我们接下来看一下下面的例题:利用 while True 无限循环配合 break 语句,计算 1 + 2 + 4 + 8 + 16 + … 的前20项的和。
解析代码如下:
sum = 0
x = 1
n = 1
while True:
if n > 20:
break
sum += x
x *= 2
n += 1
print ( sum )
该代码最重要的是要明白:break退出循环的条件是循环已执行了20次。
Python之 continue继续循环
在循环过程中,我们可以用break函数退出当前循环,还可以用continue函数跳过后续循环代码,然后继续下一次循环。
假设我们已经写好了利用 for 循环计算平均分的代码:
mark = [77, 99, 55, 88, 66, 33, 22, 85]
sum = 0
n = 0
for a in mark:
sum += a
n += 1
print (sum / n)
现在老师只想统计及格分数的平均分,就是要把 x < 60 的分数剔除掉,这时可以利用 continue 函数来做到当 x < 60的时候,不继续执行循环体的后续代码,直接进入下一次循环:
mark = [77, 99, 55, 88, 66, 33, 22, 85]
sum = 0
n = 0
for a in mark:
if a < 60:
continue
sum += a
n += 1
print (sum / n)
接下来让我们思考一个题目:对已有的计算 0 - 100 的while循环进行改造,通过增加 continue 语句,使得只计算奇数的和:
sum = 0
x = 1
while True:
sum += x
x += 1
if x > 100:
break
print ( sum )
分析如下:当 x 是偶数时,就通过continue语句提前进入下一次循环,所以continue判断的位置非常重要。
修改的代码如下:
sum = 0
x = 0
while True:
x = x + 1
if x > 100:
break
if x % 2 == 0:
continue
sum = sum + x
print ( sum )
Python之 多重循环
其实在循环内部,还可以嵌套循环,我们来看一个例子:
for a in ['A', 'B', 'C']:
for b in ['1', '2', '3']:
print (a + b)
测试如下:
a 每循环一次,b 就会循环 3 次,这样我们可以打印出如上图一样的一个全排列。
为了让大家可以更加了解多重循环的本质,我们下面来看一个例题:
对100以内的两位数,请使用一个两重循环打印出所有十位数数字比个位数数字小的数,例如,59(5 < 9)。
for a in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
for b in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
if a < b :
print (a * 10 + b )
测试的结果如下:
今天,关于Python条件判断和循环的内容就大概这么多,具体的一些操作希望大家可以配合PyCharm多进行代码编写和测试,在实践中成长,加油了!!!